您不应该同时制作
lib一个程序包并将其添加到中
PYTHONPATH。这样就可以
lib.直接或直接导入其模块,从而为失败做好准备。
如你看到的,
lib.Types.Custom != Types.Custom
因为Python导入的工作方式。
Python搜索导入路径并解析其找到的适当条目。
- 导入时
lib.Types
,它将lib
目录导入为一个包,然后导入lib/Types.py
为其中的子模块,lib
并lib.Types
在中创建模块对象sys.modules
。 - 当您导入
Types
,它导入Types.py
作为一个独立的模块,创建模块对象Types
在sys.modules
。
所以,
Types和
lib.Types最终成为两个不同的模块对象。Python不会检查它们是否是同一文件,以使事情变得简单并避免再次猜测。
(这实际上在Python的import System中的Unwary陷阱中列为“双重导入陷阱”。)
如果
lib从中删除
PYTHONPATH,则导入
lib/foo.py将需要成为相对导入:
from .Types import Custom
或绝对导入:
from lib.Types import Custom
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)