我将简化符号。我有
PYTHONPATH=/path1/dir1:/path2/dir2
结构:
/path1/dir1/
README
muggle.py
...
utils/
/path2/dir2/
__init__.py
utils/
__init__.py
pkg2/
__init__.py
mod2.py
[dir1
有一个模块utils
,但它本身不是一个包:没有__init__.py
dir2
具有模块utils
,而does具有__init__.py
我的样板代码(在dir1
是环境的一部分之前)已从以下表格的dir2
导入
from utils.pkg2.mod2 import func2
问题在于,我现在正在修改此代码以调用从utils
中的dir1
导入的函数;我无法更改那部分环境。
我该怎么做才能使代码进入dir2/utils
模块?不幸的是,这也需要适应Python 2.6.6及更高版本。
我在SO和其他地方搜索了现有的问题;我找到的所有答案都取决于我没有的某些程序包“句柄”。
此导入语句不正确:
from utils.pkg2.mod2 import func2
[如果它能正常工作,那就是依靠解析当前工作目录,Python 2.x中的隐式相对导入或手动修改的PYTHONPATH
/ sys.path
。
这是PEP8说的导入类型:
隐式相对导入应该never,并且已在Python 3中删除。
那么该怎么做呢? sys.path
应该增加顶级目录,而不是内部软件包目录,即:
PYTHONPATH=/path1/dir1:/path2
并像这样更改导入:
from dir2.utils.pkg2.mod2 import func2
现在子包 dir2.utils
是顶级包namespaced中的utils
。