这是我的文件夹:
/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 列表中才能导入它们?
或者还有什么问题吗?
最佳答案
如果您使用的是 Python 3,则需要使用显式相对导入,而不是隐式导入(过去在 Python 2 中可以使用)。尝试更新 foopackage
的 __init__.py
文件为:
from .foo1 import foo1
from .foo2 import foo2
前导的 .
字符告诉 Python foo1
和 foo2
是同级模块,而不是您所指的顶级模块绝对地。另一种方法是使用对它们的绝对引用:
from foopackage.foo1 import foo1
from foopackage.foo2 import foo2
但我个人认为这有点过分了。如果您在将来的某个时候更改包名称(或移动为其他包的子包),它也会中断。
参见PEP 328有关相对导入变化的更多详细信息。
关于 python : how to import packages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192009/