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 , two
,three
这意味着它们处于同一级别(我可以直接使用mypackages.two和mypackages.three)。
有没有人有任何解释?
你应该阅读这个。
通过将文件放在同一级别,您将它们放在相同的包级别。在您的情况下,您需要获得此架构:
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)