您不应该同时制作lib
一个程序包并将其添加到中PYTHONPATH
。这样就可以lib.
直接或直接导入其模块,从而为失败做好准备。
如你看到的,
lib.Types.Custom != Types.Custom
Python搜索导入路径并解析其找到的适当条目。
所以,Types
和lib.Types
最终成为两个不同的模块对象。Python不会检查它们是否是同一文件,以使事情变得简单并避免再次猜测。
(这实际上在Python的Import System中的Unwary陷阱中列为“双重导入陷阱”。)
如果lib
从中删除PYTHONPATH
,则导入lib/foo.py
将需要成为相对导入:
from .Types import Custom
或绝对导入:
from lib.Types import Custom