问题描述
这是我的项目结构:
git_dir/
root/
__init__.py
tests/
__init__.piy
test1.py
foo_to_test/
foo.py
我正在使用pytest测试foo.py,而test1.py如下:
from foo_to_test.foo import func_to_test
def test1():
assert something about func_to_test
我要从终端运行
pytest tests
现在解决这个问题。 当使用--import-mode追加或--import-mode前置时,它将'git_dir'添加到PYTHONPATH。 问题在于'git_dir'不是项目根目录。
-
我可以添加sys.path.append('git_dir / root'),但是名称'git_dir'对于在其他计算机上工作的其他程序员而言是不同的。
-
我在pytest文档中看到使用--import-mode importlib可能解决了我的问题,但是它似乎对我的PYTHONPATH没有任何影响,我无法理解它在做什么
所以我的问题是:
解决方法
这看起来很难,因为它不应该是这样工作的。可能是时候了解一下包装了。
Python 模块系统旨在按照您的描述在 sys.path
目录中查找模块。这个变量将由用户填充,以某种方式,最好不要干预。
当开发人员想要使用您的软件包时,他们必须确保它安装在他们运行测试的系统上。
如果您想让他们更轻松,请提供例如project.toml
文件;然后他们可以构建您的软件包,并使用 pip install /path/to/your/distribution-file.tgz
安装它。
有关此处的更多信息:https://setuptools.readthedocs.io/en/latest/userguide/quickstart.html#python-packaging-at-a-glance。