在 PYTHONPATH 元素的顶部导入两个具有相同名称的模块
Import two modules with same name at top of PYTHONPATH elements
我会缩短符号。我有
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
导入的函数到 dir1
;我无法改变那部分环境。
如何使我的代码适用于 dir2/utils
模块?不幸的是,这也需要适应 Python 2.6.6 及更高版本。
我在 SO 和其他地方搜索了现有问题;我找到的所有答案都取决于一些我没有的包 "handle"。
此导入语句不正确:
from utils.pkg2.mod2 import func2
如果它曾经正常工作,那是依赖于当前工作目录的解析,Python 2.x 中的隐式相对导入,或者手动修改 PYTHONPATH
/ sys.path
.
这是 PEP8 所说的导入类型:
Implicit relative imports should never be used and have been removed in Python 3.
那么该怎么办呢? sys.path
应该增加顶级目录,而不是包内目录,即:
PYTHONPATH=/path1/dir1:/path2
并像这样更改导入:
from dir2.utils.pkg2.mod2 import func2
现在 子包 dir2.utils
来自顶级包 utils
.
namespaced
我会缩短符号。我有
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
导入的函数到 dir1
;我无法改变那部分环境。
如何使我的代码适用于 dir2/utils
模块?不幸的是,这也需要适应 Python 2.6.6 及更高版本。
我在 SO 和其他地方搜索了现有问题;我找到的所有答案都取决于一些我没有的包 "handle"。
此导入语句不正确:
from utils.pkg2.mod2 import func2
如果它曾经正常工作,那是依赖于当前工作目录的解析,Python 2.x 中的隐式相对导入,或者手动修改 PYTHONPATH
/ sys.path
.
这是 PEP8 所说的导入类型:
Implicit relative imports should never be used and have been removed in Python 3.
那么该怎么办呢? sys.path
应该增加顶级目录,而不是包内目录,即:
PYTHONPATH=/path1/dir1:/path2
并像这样更改导入:
from dir2.utils.pkg2.mod2 import func2
现在 子包 dir2.utils
来自顶级包 utils
.