使用单个导入时遇到的实际问题是由于软件包的优先级高于模块:
请注意,使用时from package import item
,项目可以是程序包的子模块(或子程序包),也可以是程序包中定义的其他名称,例如函数,类或变量。该import
语句首先测试项目是否在包装中定义;如果不是,则假定它是一个模块并尝试加载它。如果找不到它,ImportError
则会引发异常。
无论如何,我 强烈 建议重命名文件或目录,因为您 导入多个具有给定名称的模块。发生问题是因为每个模块/包对象都存储到中sys.modules
,这很简单dict
,因此不能包含多个相等的键。
特别是,假设foo.py
和foo
目录位于不同的目录中(如果不是,则仍然无法导入foo.py
),请执行以下操作:
from foo import gaz
它将加载foo.py
并将模块放入sys.modules
,然后尝试执行以下操作:
from foo.bar import wakaka
由于导入尝试使用模块foo.py
而不是包,因此将失败。
相反,如果您第一次导入foo.bar
,则会发生相反的情况;导入将使用包而不是模块。