Python 导入错误,尽管包含目标模块的文件夹中存在_init__u;.py
我在一个Python 导入错误,尽管包含目标模块的文件夹中存在_init__u;.py,python,python-2.7,python-import,pythonpath,Python,Python 2.7,Python Import,Pythonpath,我在一个virtualenv中有以下目录结构: /dir_a/dir_b/__init__.py /dir_a/dir_b/module_1.py /dir_a/dir_b/module_2.py /dir_a/dir_c/__init__.py /dir_a/dir_c/module_3.py /dir_a/__init__.py /dir_a/module_4.py 在模块4.py内部,我可以成功导入模块1.py、模块2.py和模块3.py。另一方面,我无法在模块3.py中导入模块4.py
virtualenv
中有以下目录结构:
/dir_a/dir_b/__init__.py
/dir_a/dir_b/module_1.py
/dir_a/dir_b/module_2.py
/dir_a/dir_c/__init__.py
/dir_a/dir_c/module_3.py
/dir_a/__init__.py
/dir_a/module_4.py
在模块4.py
内部,我可以成功导入模块1.py
、模块2.py
和模块3.py
。另一方面,我无法在模块3.py
中导入模块4.py
(例如导入目录模块4
)。它抱怨:“没有名为dir_a.module_4的模块”
我错过了什么?我需要在这里处理我的
virtualenv
的PYTHONPATH吗?如果是这样,为什么导入module_1.py
、module_2.py
和module_3.py
都可以,而不必触摸PYTHONPATH?在这种情况下,我不会弄乱PYTHONPATH
。我想你需要的是电话。在您的特定情况下,要从子模块(如module_3
)导入module_4
,您需要:
from .. import module_4
我将尝试重新创建一个人为的示例,以解释我自己:
模块_1.py:
# import sibling submodule
print 'module_1'
from . import module_2
模块_2.py:
print 'module_2'
模块_3.py:
# import parent module
print 'module_3'
from .. import module_4
模块_4.py:
# import child submodule
print 'module_4'
import dir_b.module_1
另外还有一个额外的特殊模块,可以过渡地导入所有其他模块。在模块4
旁边的包内目录a
中创建一个模块5.py
模块_5.py:
print 'module_5'
import dir_c.module_3
现在,从目录a
父文件夹中,您可以看到运行不同模块/子模块时发生的情况:
$ python -m dir_a.module_4
module_4
module_1
module_2
$ python -m dir_a.dir_c.module_3
module_3
module_4
module_1
$ python -m dir_a.module_5
module_5
module_3
module_4
module_1
module_2
这里的一个附带问题是,拥有子项目
dir_b
和dir_c
应该意味着它们可能相互依赖,但决不依赖于高于自身的任何东西。感谢您的建议。刚刚尝试过,但ValueError:尝试在顶级包之外进行相对导入
相对导入仅在包内有效。假设dir\u a
是包名,dir\u c
是子包,您可以从包含dir\u a
包的目录中尝试python-m dir\u a.dir\u c.module\u 3
。