Python 导入模块时的奇怪行为
我有一个名为“package”的Python包。其中有空的Python 导入模块时的奇怪行为,python,python-import,Python,Python Import,我有一个名为“package”的Python包。其中有空的\uuuu init\uuuu.py和两个模块。其中一个名为m1.py,只包含一行: x = 3 另一个称为m2.py,包含以下行: x = 5 现在我试着使用这个模块。首先,我会这样做: from package.m1 import x print package.m1.x from package.m1 import x import package.m2 print package.m1.x 当然它不起作用-我得到这样的错误
\uuuu init\uuuu.py
和两个模块。其中一个名为m1.py
,只包含一行:
x = 3
另一个称为m2.py
,包含以下行:
x = 5
现在我试着使用这个模块。首先,我会这样做:
from package.m1 import x
print package.m1.x
from package.m1 import x
import package.m2
print package.m1.x
当然它不起作用-我得到这样的错误:
NameError: name 'package' is not defined
我理解为什么它不起作用。但后来我做了类似的事情:
from package.m1 import x
print package.m1.x
from package.m1 import x
import package.m2
print package.m1.x
现在它确实起作用了。为什么?怎么用?我没有导入package.m1 从x导入y的
语法导入整个模块,然后在当前名称空间中引用指定的对象。它可以翻译为:
import x
y = x.y
所以,您实际上是在导入package.m1。对此,我只有一个解释:
从package.m1导入x
加载模块package
和package.m1
<代码>m1
已添加到程序包
模块中,但程序包
未添加到全局
import package.m2
现在将package
模块添加到您的globals中。由于m1
已经是package
的一部分,现在可以通过package.m1
访问它>>> from package import m1
>>> package.m1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'package' is not defined
>>> import package.m2
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
>>> from package import m3
>>> package.m3
<module 'package.m3' from 'package/m3.py'>
来自程序包导入m1的>>
>>>包1.m1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“包”
>>>进口包装1.m2
>>>包1.m1
>>>从包装进口m3
>>>1.3包
继续测试:
>>> import package.m1
>>> del package
>>> import package
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
>import package.m1
>>>del包
>>>进口包装
>>>包1.m1
完全错误,导入包不会自动导入所有模块。事实确实如此。检查很简单:importsys;在第一条import
语句之后打印系统模块['package']
。