大概目录树如下:
.
├── entry1.py
├── other_files.py
└── sub
├── entry2.py
└── pkg
├── __init__.py
├── mdl_1.py
└── mdl_2.py
sub 是从一个子项目拷贝过来的( git submodule ),主项目要把它整合起来。
而在 entry2.py 中有引用
from pkg.mdl_1 import some_class
会提示 unresoleved reference ,原因很明显,有两种方法可以解决
1 、改成相对引用
from .pkg.mdl_1 import some_class
2 、改成完整引用
from sub.pkg.mdl_1 import some_class
但是问题就来了,由于 sub 是子项目,在某些时候要求 sub 可以独立运行( entry2.py ),而在这时以上两种方法均不能使 sub 正确 import 。
在 so 查到相关问题: http://stackoverflow.com/questions/16981921/relative-imports-in-python-3
有点区别。历史原因居然是 Guido 的一己之见而搞得这么复杂……
[所以现在需要一个能够同时兼容主项目和子项目独立运行的简单的 import 方式。]