这是我的文件夹:
/Workspace
somefiles.py
/foopackage
__init__.py
foo1.py
foo2.py
_ init _ .py包含
from foo1 import foo1
from foo2 import foo2
我想进口foopackage。 我试过这个:
>>>import sys
>>>sys.path.append('/home/username/Workspace')
>>>import foopackage
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/username/Workspace/foopackage/__init__.py", line 1, in <module>
from foo1 import foo1
ImportError: No module named 'foo1'
我已经尝试了sys.path.append('/ home / username / Workspace / foopackage')而且修复了这个问题。
我问我是否必须将每个包目录添加到sys.path列表中才能导入它们? 还是别的什么不对?
答案 0 :(得分:5)
如果您使用的是Python 3,则需要使用显式相对导入而不是隐式相对导入,这些导入过去适用于Python 2.尝试将foopackage
的{{1}}文件更新为:
__init__.py
领先的from .foo1 import foo1
from .foo2 import foo2
字符告诉Python .
和foo1
是兄弟模块,而不是绝对是你所指的顶级模块。另一种方法是使用它们的绝对引用:
foo2
但就个人而言,我认为这有点过分了。如果您在将来某个时候更改包名称(或移动到其他包的子包),它也会中断。
有关相对导入更改的详细信息,请参阅PEP 328。