当我使用将内容根添加到PYTHONPATH &运行我的单元测试时在Pycharm(版本2017.3.2 CE)中将源根添加到PYTHONPATH 设置一切正常。
但是,当我尝试 运行终端 或 取消设置内容根&在pycharm中运行的源根源为PYTHONPATH 。它总是说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(Model文件夹)中的方法时
from Model import model
它总是会说没有名为Model 的模块
因为最后我需要让其他用户在没有安装Pycharm的情况下执行我的代码。我需要在我的代码中集成设置。 谁可以帮忙?
答案 0 :(得分:0)
将以下代码添加到测试的初始文件中。然后它应该在Pycharm或终端中工作。
import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
答案 1 :(得分:0)
默认情况下,PyCharm会将项目根添加到PYTHONPATH
,禁用将内容根添加到PYTHONPATH 会阻止此行为。
还有一个重要的时刻需要理解:当您使用python path/to/script.py
运行脚本时,Python会将脚本目录添加到PYTHONPATH
。
看看测试运行配置,你可能有一个工作目录设置为Tests
,这意味着Tests
将由Python和项目添加到PYTHONPATH
根 - 由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
包。希望它有意义。