簡體   English   中英

如何在 tox 中要求特定的軟件包版本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM