python - python2.7模块目录不识别子模块
问题描述
我有一个像这样设置的python模块目录:
versions/__init__.py
versions/v1_0.py
versions/v2_0.py
__init__.py
是空的,但每个 v*.py
文件都定义了一些函数。然后我尝试导入所有子模块,from versions import *
但是当我dir()
用来打印所有加载的模块时,它们没有列出,并且我无法使用任何子模块功能,例如v1_0.update()
我是否versions
错误地设置了我的模块?
这是一个最小的可重现示例:
下面是显示文件结构以及每个 python 文件的文件内容的命令find
的结果。more
$ 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 文档中,我发现如果__all__
未定义,则from module import *
只会初始化module
然后导入在module
. 所以在我的情况下,因为versions/__init__.py
没有明确定义v1_0
它没有被导入。
推荐阅读
- javascript - 等待所有 ajax 请求在变量循环中完成
- verilog - Verilog 中的元编程
- java - 这个元音问题有什么问题?超出索引
- python - Pandas:按多列 groupby 计算值
- elixir - Node.spawn/2 和 Process.spawn/1 有什么区别?
- visual-studio - 当我单击 VS Code 中的任意位置时,Live Server 关闭
- matlab - 使用一个 for 循环打印多个显示函数
- asp.net - 启动 IIS Express 托管 Web 项目 (VS2015) 时无法加载 DLL
- java - 无法解析方法“in(Java.util.concurrent.TimeUnit)”
- react-native - 导航后如何保持之前的状态