这个(或类似的)问题之前已经被问过很多次了,但在我的情况下,没有一个解决方案可以工作。我的项目结构是这样的:
| project_2
main.py
__init__.py
systems.py
| config
__init__.py
options.py
| database
__init__.py
database.py
entity.py
| tests
__init__.py
test_systems.py
test_options.py
test_database.py
test_entity.py
显然我需要在tests包下导入test modules中的所有模块。我尝试了使用点语法的相对导入:
from ..systems import System
from ..config import options
from ..database.entity import Entity
返回 ValueError:尝试在非包中进行相对导入。我已经尝试过一个包结构,其中所有东西(包括系统)都在它自己的包中。它失败并显示相同的消息。
真正困扰我的是这应该有效:PEP 328,但它没有。我真的想避免必须将包附加到 $PYTHONPATH 或使用一些疯狂的方法,例如从文件路径加载带有 imp 的模块。
我读到问题的一部分可能是 systems.py 在主包中,但这并不能解释为什么其余的相对导入也不起作用。
PS 实际上,我从 PEP 328 重新创建了示例只是为了对其进行测试,但它不起作用。