[英]Python: Inconsistent importing behavior for “import package1.module1”?
我当时以这种形式的陈述
import package1.module1
仅用于包和模块 , 而不适用于模块中的对象 ,因此例如,如果module1
包含variable1
,则无法执行
import package1.module1.variable1
这是感知到的不一致:假设module1
和variable1
具有相同的名称,例如,假设两者都称为module1
。 而且,在package1
的__init__.py
,我有
from .module1 import module1
然后做
import package1.module1
将导入对象 module1
,而不是模块 module1
。 仅当module1
与对象和模块名称相同时,此方法才有效。
官方说明可以在docs中找到:
import语句首先测试项目是否在包装中定义; 如果不是,则假定它是一个模块并尝试加载它。 如果找不到它,则会引发ImportError异常。
似乎import
似乎认为来自模块module1
的对象module1
是一个模块,这就是为什么import package1.module1
起作用但产生该对象的原因。
就一种解决方法而言,如果您尝试将from _ import _ as x
,将重命名该属性并绕开名称阴影。 它应该产生您想要的结果-模块module1
的路径导入(因为Python会看到类型<module>
),而不是变量module1
的对象导入。
以下是一些代码输出,可帮助您更清楚地说明问题:
>>> import package1.module1
>>> print(package1.module1)
<module 'package1.module1' from 'package1/module1.pyc'>
>>> from package1.module1 import module1
>>> print(module1)
1
>>> from package1 import m
>>> print(m)
1
在这里,我没有from module1 import module1 as m
的__init__.py
的package1
和我的设置module1
变到1 module1.py
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.