当我导入模块时,此嵌套方案工作正常。但是,当我尝试导入软件包时,结果不一致。这是非常简单的情况:

我当前文件夹的内容:

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 , twothree,这意味着它们处于同一级别(我可以使用 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/

10-09 18:48