从Python中的姐妹子目录导入?
所以,我看到了一些关于堆栈溢出的类似问题,但似乎没有任何东西可以解决我的问题,或者说一般情况。所以,希望这个问题能解决这一问题,并停止我的头痛。我有一份git回购协议,格式如下:从Python中的姐妹子目录导入?,python,import,Python,Import,所以,我看到了一些关于堆栈溢出的类似问题,但似乎没有任何东西可以解决我的问题,或者说一般情况。所以,希望这个问题能解决这一问题,并停止我的头痛。我有一份git回购协议,格式如下: repo/ __init__.py sub1/ __init__.py sub1a/ __init.py mod1.py sub2/ __init__.py mod2.py 我如何从mod1.py导入mod2.py,
repo/
__init__.py
sub1/
__init__.py
sub1a/
__init.py
mod1.py
sub2/
__init__.py
mod2.py
我如何从mod1.py导入mod2.py,反之亦然,这取决于mod1.py还是mod2.py是脚本(当每个脚本都在导入时——不是导入时),这会发生什么变化?最简单的解决方案是将包含
repo
的目录放在PYTHONPATH
中,然后只使用绝对路径导入,例如,import repo.sub2.mod2
等
任何其他解决方案都会涉及一些黑客行为,如果您想让它涵盖从任意目录直接调用两个python文件作为脚本的情况-最有可能的是
sys.path
mangling,以有效地完成与设置PYTHONPATH
相同的任务,但无需用户设置。如果您使用的是Python 2.6+,则有两种选择:
- 相对进口
- 将
添加到您的repo
PYTHONPATH
导入模块
)不适用于相对导入
更好的解决方案是在正确设置Python路径的情况下使用绝对导入(例如bash
):
更多信息:
如果要使脚本“知道”在包中,可以给它一个
\uuuuuuuuuuuuuuu
属性。看见然后,您可以正常地从该脚本中使用显式相对导入(例如,from…sub2 import mod2
)。我可以编辑PYTHONPATH,但是有标准的方法来强制执行吗?我不希望所有的新用户都不得不手动进入并更新他们的Python路径。如果你不想让人们管理<代码> Python Puths/Cuth>自己,那么你可能需要考虑<代码> sys .Posith(例如,使用\uu file\uu
plusos.abspath
查找脚本所在的位置,然后获取目录,该目录上方的正确层数将成为repo
的父目录,然后使用sys.path.insert
它。)我真的希望这些相对导入能够工作。但是,在我的Python2.7上,它们不起作用。使用Python2.7,我成功地使用了sub2.mod2 import thing中的语句。
from .sub2.mod2 import thing
from ..sub2.mod2 import otherthing
export PYTHONPATH=/where/your/project/is:$PYTHONPATH