问题描述
我想使用 tox 运行一些测试,但为了使其正常工作,他尝试先导入一些模块,然后使用 pip 执行此操作。
我的项目结构如下:
module_a/
/tests/test_a.py
/__requirements.txt
/__tox.ini
module_b/
/tests/test_b.py
/__requirements.txt
/__tox.ini
module_c/
/tests/test_c.py
/__requirements.txt
/__tox.ini
module_a/requirements.txt
#requirements.txt content from module A
'../module_b'
module_b/requirements.txt
#requirements.txt content from module B
'../module_c'
我所期望的只是通过要求 module_b 来导入 module_c,因为他需要他,但由于某种原因我不能,它会引发错误
错误:找不到满足要求的版本 module_c(来自 module_b)(来自版本:无) 错误:找不到与 module_c 匹配的分布
为此,我还必须在 module_a requirements.txt 中添加 module_c 才能工作。
#requirements.txt content from module A
'../module_c'
'../module_b'
tox.ini 文件
[tox]
envlist =
py3
[testenv]
deps =
-r requirements.txt
commands =
#basically the same for all modules,only module name changes
pytest --cov {envsitepackagesdir}/module_a
如果我只是在 module_b 中运行 pip install 就可以正常工作,就像 module_c 路径错误一样。
有没有办法在运行 tox 或 pip 时使用 requirements.txt 从依赖项安装依赖项?
解决方法
根据评论中的最新反馈,这不是 tox
问题,而是项目结构问题。
通常有两种方式一起开发代码:
- 将所有内容放在一个存储库中,并创建一个合适的包 (
__init__.py
),然后您可以毫无问题地导入其他子包 - 使用不同的项目和存储库,并正确安装依赖项
有一些方法可以更改第二种方式,因此您可以使用其他包的源代码作为依赖项。
我只知道有一个项目这样做:morepath
你可以看看他们的 tox.ini
配置:
[src]
deps = -e file:{toxinidir}/src/reg#egg=reg
-e file:{toxinidir}/src/dectate#egg=dectate
-e file:{toxinidir}/src/importscan#egg=importscan
[testenv]
usedevelop = True
extras = test
deps = {[src]deps}
-r{toxinidir}/requirements/fixtures.txt
您可以在...找到完整的配置
https://github.com/morepath/morepath/blob/09972904229f807da75c75d8825af1495057acdc/tox.ini