python - 从包中导入子包不工作?

3 投票
3 回答
6313 浏览
提问于 2025-04-16 11:15

我有以下这些文件:

pack/__init__.py
pack/subpack/__init.__py
pack/subpack/mod2.py

然后下面的代码在最后一行出错了:

from pack import * #should import everything
print subpack      #NameError: name 'subpack' is not defined

我本来期待子包能被导入——为什么会有这样的区别,我该怎么解决呢?重要:这里说的“解决”是指我希望能直接用 subpack 来引用,而不需要每次都写 pack.subpack

3 个回答

2

对于Python 3,另外一个建议是:

# pack/__init__.py
from . import subpack

而且,正如之前提到的,如果声明了__all__,那么这里要加上'subpack'

还有,别忘了,如果你不仅需要:

print subpack

而且还需要:

print subpack.mod2

那么你需要在pack/subpack/__init__.py文件中做类似的操作。

2

试着在 pack/__init__.py 文件中添加 "import subpack"。

如果你有声明 __all__,确保里面包含 'subpack'。

8

你需要在下面的位置添加一行代码:

__all__ = ["mod1", "subpack"]

这行代码要放在 pack/__init__.py 文件里。如果没有这一行,mod1 也不会被导入,所以我在想这到底是怎么回事。你可以参考一下 Guido的教程中相关的部分

撰写回答