[英]how to require a specific package version in tox?
在我的tox.ini
文件中,依賴項是通過requirements.txt
文件安裝的, setup.py
也使用該文件,如下所示:
requirements.txt
文件包含可接受范圍的django
包,具體取決於安裝的 python 版本,如下:
Django>=1.11,<2 ; python_version == '2.7'
Django>=1.11,<3 ; python_version > '3'
對於 python3,我想確保測試在django 2.0
以及默認安裝的最新django 2.1+
上運行,遵守requirements.txt
文件中指定的版本約束。 為此,我使用命令強制安裝所需的 django 版本,如下所示:
[tox]
envlist = {py27,py3}-django111,py3-django{20,21}
[testenv]
deps =
-r{toxinidir}/requirements.txt
commands =
django111: pip install 'Django>=1.11,<1.12'
py3-django20: pip install 'Django>=2.0,<2.1'
py3-django21: pip install 'Django>=2.1'
pytest
理想情況下,我可以像這樣添加到deps
變量中:
[testenv]
deps =
-r{toxinidir}/requirements.txt
django111: Django>=1.11,<1.12
py3-django20: Django>=2.0,<2.1
py3-django21: Django>=2.1
commands =
pytest
但是pip
不支持雙重要求,即使在指定版本約束的方式上沒有沖突,也會拋出錯誤。
使用commands
覆蓋安裝的缺點是需要刪除通過requirements.txt
安裝的django
包版本才能安裝所需的版本。 有沒有辦法避免那個額外的步驟?
一個技巧是將需求從requirements.txt
移動到setup.py
- 它松散地固定在那里,以便您的所有django 版本都可用。 例如
# setup.py
from setuptools import setup, find_packages
setup(
...
install_requires=[
"Django>=1.11,<2.1",
]
)
然后在tox.ini
使用您的第二個建議
[testenv]
deps =
-r{toxinidir}/requirements.txt
django111: Django>=1.11,<1.12
py3-django20: Django>=2.0,<2.1
py3-django21: Django>=2.1
commands =
pytest
...只要 Django 要求未在requirements.txt
列出。
這是有效的,因為pip install
分為兩部分,第一部分來自tox:deps
,您在其中指定硬要求,第二部分來自等效的pip install -e .
setup.py
有更寬松的要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.