我正在将当前使用pipenv
的项目切换为poetry
作为测试,以查看有什么区别。该项目是一个简单的可重新分发的Django应用。它支持Python 3.6-8,Django 2.2和3.0。我有一个tox.ini
文件,该文件涵盖了Python和Django的所有组合:
[tox]
envlist = py{36,37,38}-django{22,30}
[testenv]
whitelist_externals = poetry
skip_install = true
deps =
django22: Django==2.2
django30: Django==3.0
commands =
poetry install -vvv
poetry run pytest --cov=my_app tests/
poetry run coverage report -m
我遇到的问题(pipenv
世界中不存在)是poetry install
语句将始终用deps
部分中的内容覆盖poetry.lock
部分中的内容。 poetry
文件(如果不存在,将自动生成)。这意味着测试矩阵永远不会针对Django 2.2进行测试-默认情况下,每个tox virtualenv都会安装Django 3.0。
我不知道这应该如何工作-使用pyproject.toml
安装依赖项是否应该尊重要安装依赖项的现有环境?
所以-我的问题是-如何建立以诗歌为依存关系管理器的多版本tox(或travis)测试矩阵?
我的[tool.poetry.dependencies]
python = "^3.6"
django = "^2.2 || ^3.0"
将Python / Django版本定义为:
poetry.lock
生成的[[package]]
category = "main"
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
name = "django"
optional = false
python-versions = ">=3.6"
version = "3.0"
文件(未提交)具有以下Django版本信息:
Django==2.2
更新:包括干净的毒物输出
这是删除锁文件并重新创建tox环境时的结果。如您所见,tox将poetry
作为依赖项安装在virtualenv中,但是3.0
然后在安装时将其更新为pyproject.toml
。
我需要一个运行诗歌安装的解决方案,同时尊重现有的软件包安装。也就是说,如果Django = "^2.2 || ^3.0"
声明my-app$ tox -r -e py36-django22
py36-django22 recreate: .tox/py36-django22
py36-django22 installdeps: Django==2.2
py36-django22 installed: Django==2.2,my-app==0.1.0,pytz==2019.3,sqlparse==0.3.0
py36-django22 run-test: commands[0] | poetry install -vvv
Using virtualenv: .tox/py36-django22
Updating dependencies
Resolving dependencies...
1: derived: django (^2.2 || ^3.0)
...
PyPI: 10 packages found for django >=2.2,<4.0
...
1: Version solving took 3.330 seconds.
1: Tried 1 solutions.
Writing lock file
Package operations: 52 installs, 1 update, 0 removals, 3 skipped
- ...
- Updating django (2.2 -> 3.0)
- ...
,并且已经安装了2.2,则请固定到该版本-不要尝试升级。
import re
diff_list = diff.split("\n")
regx = re.compile("(<.*predicted_serotype.*\/>)\s.*predicted_serotype.*")
matches = regx.findall(diff)
for match in matches:
print(match)
答案 0 :(得分:0)
还没有对它进行彻底的测试,但是我相信这样应该可以:
[tox]
envlist = py{36,37,38}-django{22,30}
isolated_build = True
[testenv]
deps =
django22: Django==2.2
django30: Django==3.0
commands =
pytest --cov=my_app tests/
coverage report -m