我将缩短表示法。我有
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
,并且确实有__init__.py
我的样板代码(之前dir1
是环境的一部分)具有dir2
以下形式的导入:
from utils.pkg2.mod2 import func2
问题在于,我现在正在修改此代码以调用从utils
in导入的函数dir1
。我无法改变那部分环境。
我该怎么做才能使代码适合该dir2/utils
模块?不幸的是,这还需要适应Python 2.6.6及更高版本。
我在SO和其他地方搜索了现有的问题;我找到的所有答案都取决于我没有的某些程序包“句柄”。
此导入语句不正确:
from utils.pkg2.mod2 import func2
如果它能正常工作,那就是依靠当前工作目录,Python 2.x中的隐式相对导入或手动修剪的PYTHONPATH
/进行解析sys.path
。
PEP8表示的导入类型为:
绝对不要使用隐式相对导入,并且在Python 3中已将其删除。
那么该怎么做呢?sys.path
应该增加顶层目录,而不是软件包内目录,即:
PYTHONPATH=/path1/dir1:/path2
并更改导入,如下所示:
from dir2.utils.pkg2.mod2 import func2
现在,该子包 已从顶级包dir2.utils
中命名utils
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句