当我在 Pycharm(版本 2017.3.2 CE)中使用 Add content roots to PYTHONPATH & Add source roots to PYTHONPATH 设置运行我的单元测试时,一切正常。
但是当我尝试运行终端 或 将内容根和源根取消设置为 PYTHONPATH 在 pycharm 中运行。它总是说 ImportError: No module named ***
我的文件夹结构如下:
-Project
-Controller
-__init__.py
-test_controller.py
-Model
- __init__.py
-model.py
-Tests
-__init__.py
-someunittest.py
当 test_controller.py 调用 model.py(模型文件夹)中的方法时,例如
从模型导入模型
它总是会说No module named Model
因为最后我需要让其他用户在不安装 Pycharm 或其他东西的情况下执行我的代码。我需要将设置集成到我的代码中。 谁能帮忙?
最佳答案
PyCharm 将项目根添加到 PYTHONPATH
默认情况下,禁用 Add content roots to PYTHONPATH 可防止此行为。
还有一个重要时刻需要理解:当您使用 python path/to/script.py
运行脚本时Python 将脚本目录添加到 PYTHONPATH
.
查看测试运行配置,您可能将工作目录设置为 Tests
, 表示 Tests
将被添加到 PYTHONPATH
通过 Python,项目根目录 - 通过 PyCharm。禁用将内容根添加到 PYTHONPATH,PyCharm 不会将项目根添加到 PYTHONPATH
Python 不会找到 Model
包。
要使其在终端上运行,您必须注意您所做的确切调用,例如:
cd <project_root>
python -m unittest Tests.test_something
# or
python -m unittest discover Tests/
没问题,Python 会将当前工作目录(项目根目录)添加到 PYTHONPATH
.
cd Tests
python -m unittest test_something.py
将失败 - <project_root>
不在 PYTHONPATH
中, Python 无法解析 Model
包裹。希望它有意义。
关于Python 单元测试适用于 Pycharm,但不适用于终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49849475/