使用 pip 从依赖项安装依赖项

时间:2021-07-08 15:05:42

标签: python-3.x tox

我想使用 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 从依赖项安装依赖项?

1 个答案:

答案 0 :(得分:0)

根据评论中的最新反馈,这不是 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