首页 > 解决方案 > 使用 pip 从依赖项中安装依赖项

问题描述

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

标签: python-3.xtox

解决方案


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


推荐阅读