python : how to import packages?

标签 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 列表中才能导入它们?
或者还有什么问题吗?

最佳答案

如果您使用的是 Python 3,则需要使用显式相对导入,而不是隐式导入(过去在 Python 2 中可以使用)。尝试更新 foopackage__init__.py 文件为:

from .foo1 import foo1
from .foo2 import foo2

前导的 . 字符告诉 Python foo1foo2 是同级模块,而不是您所指的顶级模块绝对地。另一种方法是使用对它们的绝对引用:

from foopackage.foo1 import foo1
from foopackage.foo2 import foo2

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

参见PEP 328有关相对导入变化的更多详细信息。

关于 python : how to import packages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192009/

相关文章:

Python打印全文文件

python - 从 Python 中返回 include 和 runtime lib 目录

python - python 中的新 sys.path

python - 如何检查路径是否在 PYTHONPATH 中?

python - 管理多个开发人员的 sys.path

python - 我想从 spacy 中的文本中提取文本值

python - mysql flask 中的光标无法正常工作

python - 请求失败,出现 SSLError 'failed to allocate SSL context'

python - virtualenv 使用不正确的 sys.path

python - 如何从 sys.path 中永久删除值?