当我导入模块时,这个嵌套的场景很好用。但是当我尝试导入包时,结果不一致。以下是非常简单的情况:
当前文件夹的内容:
这是脚本:
我期望我能够通过这种方式访问2和3:
换句话说,逻辑层应该是这样的:
当前文件夹的内容:
mypackages <directory>
__init__.py
one.py
two.py
three.py
这是脚本:
这是脚本:
__init__.py :
import one
one.py :
import two
two.py :
import three
我期望我能够通过这种方式访问2和3:
import mypackages
mypackages.one.two
mypackages.one.two.three
换句话说,逻辑层应该是这样的:
one
two
three
但是当我执行import mypackages时,所有模块都会在同一个级别上暴露:
>>> import mypackages
>>> print dir(mypackages)
['__builtins__', '__doc__', '__file__', '__name__', '__package__',
'__path__', 'one', 'three', 'two']
它应该只显示一个模块,对吧?我感到困惑的是它显示了所有的 one, two
和 three
,这意味着它们处于同一级别(我可以直接使用 mypackages.two 和 mypackages.three)。
有人能解释一下吗?
intl
的文件夹,其中包含一个文件(scanner.py
),并希望将其转换为包。在主文件中,执行import intl
和scanner = intl.Scanner()
没有起作用。我不得不修改__init__.py
并添加from .scanner import Scanner
。因此,使用来自包/子包的函数和类的用例将改进此答案,因为它没有提到修改__init__.py
的任何内容。虽然我设法让我的脚本工作,但我不知道我是否采取了正确的方法 :) - akinuri