python:带有“嵌套”模块的导入包

and*_*dio 6 python import nested module package

当我导入模块时,这个嵌套场景工作正常。但是当我尝试导入包时,我得到了不一致的结果。这是一个非常简单的案例:

我当前文件夹的内容:

mypackages <directory>
   __init__.py 
   one.py
   two.py
   three.py
Run Code Online (Sandbox Code Playgroud)

这是脚本:

__init__.py :
import one

one.py :
import two

two.py :
import three
Run Code Online (Sandbox Code Playgroud)

我期待我应该能够通过这种方式访问两个三个

import mypackages
mypackages.one.two
mypackages.one.two.three
Run Code Online (Sandbox Code Playgroud)

或者换句话说,逻辑级别应该是这样的:

one
  two
    three
Run Code Online (Sandbox Code Playgroud)

但是当我导入 mypackages 时,我将所有模块都暴露在同一级别:

>>> import mypackages
>>> print dir(mypackages)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 
'__path__', 'one', 'three', 'two']
Run Code Online (Sandbox Code Playgroud)

它应该只显示 one模块,对吗?我很困惑为什么它会显示所有内容one , twothree这意味着它们处于同一级别(我可以直接使用mypackages.twomypackages.three)。

有没有人有任何解释?

alu*_*iak 8

你应该阅读这个

通过将文件放在同一级别,您将它们放在相同的包级别。在您的情况下,您需要获得此架构:

mypackage
??? __init__.py
??? one.py  # contains "import two"
??? two
    ??? __init__.py
    ??? two.py  # contains "import three"
    ??? three
        ??? __init__.py
        ??? three.py
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式访问该包:

import mypackage.one
import mypackage.one.two
import mypackage.one.two.three
Run Code Online (Sandbox Code Playgroud)