python2.7 模块目录无法识别子模块
python2.7 module dir not recognizing submodules
我有一个 python 模块目录设置如下:
versions/__init__.py
versions/v1_0.py
versions/v2_0.py
__init__.py
是空的,但每个 v*.py
文件都定义了一些函数。然后我尝试使用 from versions import *
导入所有子模块,但是当我使用 dir()
打印出我所有加载的模块时,它们没有列出,我无法使用任何子模块功能,例如 v1_0.update()
我的 versions
模块设置不正确吗?
这是一个最小的可重现示例:
下面是 find
和 more
命令的结果,显示了文件结构以及每个 python 文件的文件内容。
$ find .
.
./versions
./versions/__init__.py
./versions/__init__.pyc
./versions/v1_0.pyc
./versions/v1_0.py
$ more versions/*.py
::::::::::::::
versions/__init__.py
::::::::::::::
::::::::::::::
versions/v1_0.py
::::::::::::::
def update():
pass
使用此设置并使用 .
的密码,我执行了以下操作:
$ python2
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from versions import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> versions.v1_0.update
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'versions' is not defined
>>> from versions.v1_0 import update
>>> update
<function update at 0x10428c0>
在 python 文档 here 中,我发现如果未定义 __all__
,则 from module import *
将仅初始化 module
,然后显式导入任何名称在 module
中定义。所以在我的例子中,因为 versions/__init__.py
没有明确定义 v1_0
它没有被导入。
我有一个 python 模块目录设置如下:
versions/__init__.py
versions/v1_0.py
versions/v2_0.py
__init__.py
是空的,但每个 v*.py
文件都定义了一些函数。然后我尝试使用 from versions import *
导入所有子模块,但是当我使用 dir()
打印出我所有加载的模块时,它们没有列出,我无法使用任何子模块功能,例如 v1_0.update()
我的 versions
模块设置不正确吗?
这是一个最小的可重现示例:
下面是 find
和 more
命令的结果,显示了文件结构以及每个 python 文件的文件内容。
$ find .
.
./versions
./versions/__init__.py
./versions/__init__.pyc
./versions/v1_0.pyc
./versions/v1_0.py
$ more versions/*.py
::::::::::::::
versions/__init__.py
::::::::::::::
::::::::::::::
versions/v1_0.py
::::::::::::::
def update():
pass
使用此设置并使用 .
的密码,我执行了以下操作:
$ python2
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from versions import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> versions.v1_0.update
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'versions' is not defined
>>> from versions.v1_0 import update
>>> update
<function update at 0x10428c0>
在 python 文档 here 中,我发现如果未定义 __all__
,则 from module import *
将仅初始化 module
,然后显式导入任何名称在 module
中定义。所以在我的例子中,因为 versions/__init__.py
没有明确定义 v1_0
它没有被导入。