安装特定版本的setuptools作为软件包的依赖项

问题描述

我的软件包具有依赖项中的setuptools。安装软件包时,我试图限制setuptools的版本。 该软件包在setup.py中具有以下限制:

setup(
    setup_requires=[
        'setuptools==50.2.0','pip>=19,!=20.0,!=20.0.1,<21'
        ],...

并且在pyproject.toml中具有相同的限制:

[build-system]
requires = ["setuptools==50.2.0","pip>=19,<21","wheel"]  # PEP 508 specifications.

但是,当使用pip安装我的软件包时,它将下载最新的setuptools 50.3.0。

为什么它忽略要求?如何使其不安装最新版本?

解决方法

似乎准确,50.3.0大于40.0,小于51,并且不等于46.0或50.0。您可能需要进一步限制您的要求。如果知道所需的版本,只需明确指定

编辑:

我创建了一个新的venv并选中了pip list,似乎使用了足够高的pip版本,setuptools的版本为50.3.0。

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ pip3 list | grep setup
setuptools (20.7.0)
You are using pip version 8.1.1,however version 20.2.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

在venv内部(假设使用Python 3.x)

$ . vv/bin/activate
(vv) $ pip3 -V
pip 20.2.3 from /home/user/vv/lib/python3.5/site-packages/pip (python 3.5)
(vv) $ pip3 list | grep setup
DEPRECATION: Python 3.5 reached the end of its life on September 13th,2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
setuptools 50.3.0
,

我认为您对构建时间(setup_requires / pyproject.toml构建系统要求)和安装时间(install_requires)感到困惑。在安装时,您会获得未固定的setuptools,因为它是可传递的依赖项,没有版本限制

setuptools通过install_requires中的传递依赖关系(特别是jsonschema)被引入

$ visualize-requirements t.txt
 cryptography>=2.4.2,<3
   - cffi!=1.11.3,>=1.8
     - pycparser
   - six>=1.4.1
 click>=7.0,<8
 intelhex<3,>=2.2.1
 python-jose<4,>=3.0.1
   - pyasn1
   - rsa
     - pyasn1>=0.1.3
   - ecdsa<0.15
     - six
   - six<2.0
 jsonschema<4,>=3.0.0
   - six>=1.11.0
   - attrs>=17.4.0
   - setuptools
   - pyrsistent>=0.14.0
 pyocd==0.27.3
   - intervaltree<4.0,>=3.0.2
     - sortedcontainers<3.0,>=2.0
   - pylink-square
     - six
     - psutil>=5.2.2
     - future
   - cmsis-pack-manager>=0.2.7
     - milksnake>=0.1.2
       - cffi>=1.6.0
         - pycparser
     - appdirs>=1.4
     - pyyaml>=3.12
   - pyelftools
   - six<2.0,>=1.0
   - colorama
   - prettytable
   - pyusb>=1.0.0b2,<2.0
   - pyyaml<6.0,>=5.1
   - intelhex<3.0,>=2.0
 cbor==1.0.0
 imgtool==1.7.0a1
   - intelhex>=2.2.1
   - click
   - cryptography>=2.4.2
     - cffi!=1.11.3,>=1.8
       - pycparser
     - six>=1.4.1
   - cbor>=1.0.0

我从我写的名为requirements-tools的工具中使用visualize-requirements

,

感谢答案和评论,我可以得出一个结论。

要使用特定版本的 setuptools ,必须在两个位置都有它-在 pyproject.toml install_requires 的开头> setup.py

pip 这样的工具将使用 pyproject.toml 中的版本来构建项目。但是,如果在要求中包含最新版本的 setuptools 的任何依赖项,则将使用最新版本来安装依赖项。另外,环境将保留上次安装的版本。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...