python:如何导入包?

时间:2013-10-04 22:56:10

标签: python sys.path

这是我的文件夹:

/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列表中才能导入它们? 还是别的什么不对?

1 个答案:

答案 0 :(得分:5)

如果您使用的是Python 3,则需要使用显式相对导入而不是隐式相对导入,这些导入过去适用于Python 2.尝试将foopackage的{​​{1}}文件更新为:

__init__.py

领先的from .foo1 import foo1 from .foo2 import foo2 字符告诉Python .foo1是兄弟模块,而不是绝对是你所指的顶级模块。另一种方法是使用它们的绝对引用:

foo2

但就个人而言,我认为这有点过分了。如果您在将来某个时候更改包名称(或移动到其他包的子包),它也会中断。

有关相对导入更改的详细信息,请参阅PEP 328