当我导入模块时,此嵌套方案工作正常。但是,当我尝试导入软件包时,结果不一致。这是非常简单的情况:
我当前文件夹的内容:
mypackages <directory>
__init__.py
one.py
two.py
three.py
这是脚本:
__init__.py :
import one
one.py :
import two
two.py :
import three
我期望我应该能够通过这种方式访问两个和三个:
import mypackages
mypackages.one.two
mypackages.one.two.three
换句话说,逻辑层次应该是这样的:
one
two
three
但是当我执行导入mypackages 时,所有模块都处于同一级别:
>>> import mypackages
>>> print dir(mypackages)
['__builtins__', '__doc__', '__file__', '__name__', '__package__',
'__path__', 'one', 'three', 'two']
它应该只显示
one
模块,对吗?我很困惑为什么它显示所有
one , two
和three
,这意味着它们处于同一级别(我可以使用 mypackages。两个和 mypackages.three )。有人有解释吗?
最佳答案
您应该阅读this。
通过将文件放在同一级别,可以将它们放在同一程序包级别。
在您的情况下,您需要获得以下架构:
mypackage
├── __init__.py
├── one.py # contains "import two"
└── two
├── __init__.py
├── two.py # contains "import three"
└── three
├── __init__.py
└── three.py
然后,您可以通过以下方式访问该软件包:import mypackage.one
import mypackage.one.two
import mypackage.one.two.three
关于python : imported packages with 'nested' modules,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36548129/