Python:"导入package1.module1"?导入行为不一致?

时间:2017-07-09 17:07:06

标签: python import

我假设表格

的陈述

module1

对于模块

对象 在模块中,例如,如果variable1包含import package1.module1.variable1,我无法做到

module1

以下是感知到的不一致:假设variable1module1具有相同的名称,例如,假设两者都称为__init__.py。并且,package1 from .module1 import module1我有

import package1.module1

然后做

module1

将导入对象 module1,而不是模块 module1。 如果subscribe对象模块的名称相同,则有效。

1 个答案:

答案 0 :(得分:0)

官方解释可在docs

中找到
  

import语句首先测试是否在包中定义了该项;如果没有,它假定它是一个模块并尝试加载它。如果找不到,则引发ImportError异常。

似乎import似乎认为模块module1中的对象module1是一个模块,这就是为什么import package1.module1可以工作但却产生了对象。< / p>

就解决方法而言,如果您尝试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的{​​{1}}中__init__.py执行了package1,并在module1中将module1.py变量设置为1。