与目录同名的Python导入类
可以说我有以下python源文件布局:
lib/foo.py
lib/foo/bar.py
然后在我的源代码中:
from foo import gaz
我收到导入错误:
ImportError: No module named foo
我如何拥有一个.py文件和一个具有相同名称的目录,所以我可以执行以下操作:
from foo import gaz
from foo.bar import wakawaka
提前致谢!
-
使用单个导入时遇到的实际问题是由于软件包的优先级高于模块:
请注意,使用时
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
,则会发生相反的情况;导入将使用包而不是模块。