my_project
-my_project
- __init__.py
- main.py
- constants.py
-test
- __init__.py
- test_main.py
test_main.py from my_project import main
main.py import constants
当我在my_project中运行nosetests时,我最终获得了ImportError: No module named 'constants'
两个__init__.py
个文件都是空白的。
如果我在import constants
中将from my_project import constants
更改为main.py
,则可以进行测试。但是,现在,如果我只是运行python main.py
,我会获得ImportError: No module named 'my_project'
。
有人能帮助我指出我做错了什么吗?我搜索过很多帖子,但我自己无法解决这个问题。感谢。
答案 0 :(得分:1)
在main.py中 - > import constants
是隐式相对导入(错误)。它应该更改为更常见的from my_project import constants
。
你提到这使鼻子测试工作。注意:您在测试子目录中不需要__init__.py
,实际上通常不鼓励这样做。
现在要修复错误,python main.py
导致导入错误,如果您没有将其包含在sys.path
中,这是正常现象。有各种各样的方法 -
答案 1 :(得分:1)
您正在Python 3项目中尝试以Python 2样式进行相对导入:{3}将在Python 3中尝试在主sys.path级别导入import constants
。 / p>
相反,请使用类似
的内容constants
在main.py中
参见例如PEP 404:
在Python 3中,包中的隐式相对导入不再存在 可用 - 仅限绝对导入和显式相对导入 支撑。