【发布时间】:2011-09-11 01:28:05
【问题描述】:
我的 PYTHONPATH 中有一个包,看起来像这样:
package/
__init__.py
module.py
print 'Loading module'
如果我从 package/ 目录运行 Python(或在此目录中编写另一个模块)并键入
import module
它加载 module.py 并按预期打印出“加载模块”。但是,如果我再输入
from package import module
它加载 module.py 并打印“加载模块”再次,这是我没想到的。这是什么原理?
注意:我想我从技术上理解 Python 这样做的原因,因为 import module 的 sys.modules 键只是 "module",但对于 from package import module,它是 "package.module"。所以我想我想知道的是为什么这里的键不同——为什么不将文件的路径名用作键,以便 Python 在这里做人们所期望的?
【问题讨论】:
-
想想只使用文件名意味着什么:这意味着两个包不能包含同名文件,因为第二次导入会给出第一个导入的文件!
-
@delnam,是的,虽然我的意思是“完整路径名”——编辑问题以澄清。
-
如果您不想再次导入,为什么不直接使用
module = package.module? -
@Wooble,是的,我知道在这种特殊情况下如何解决它,这只是我的问题的一个例子。我想知道的是我所描述的行为的基本原理。
-
您是指
import package还是import package.module?因为这可能会有所作为。
标签: python module package python-import