3

我的包在依赖项中有 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,!=20.0,!=20.0.1,<21", "wheel"]  # PEP 508 specifications.

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

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

4

3 回答 3

4

我认为您对构建时间(setup_requires / pyproject.toml build-system requires)和安装时间(install_requires)感到困惑。在安装时,您将获得未固定的 setuptools,因为它是一个没有版本限制的传递依赖

setuptoolsinstall_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

我正在使用visualize-requirements我编写的名为requirements-tools 的工具

于 2020-09-15T07:15:21.227 回答
2

似乎准确,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
于 2020-09-14T15:59:11.043 回答
1

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

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

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

于 2020-09-24T09:28:52.337 回答