python-3.x - 使用 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 从依赖项中安装依赖项?
解决方案
鉴于评论中的最新反馈,这不是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
推荐阅读
- regex - vb脚本reg exp提取相似的文本块
- python - 无法使用 reticulate 在 Rmarkdown 中导入已安装的 python 模块
- apache-spark - 如何在pyspark中添加策略
- html - 使用 API 密钥的地图未出现
- ruby-on-rails - ActiveStorage 图像未显示在视图中
- html - 在引导按钮上触发下载图像时出错
- rust - 轮询许多不同类型的期货
- javascript - 如何使用 JS Array map() 从 res.body.results 对象数组中提取月份值
- python - 检查数据框行中的多个元素的优雅方法
- solr - 关于solr版本:8.5.2错误:调用SolrCmdDistributor时出错cmd=add{,id=(null),commitWithin=3000}