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

Install specific version of setuptools as a dependency of package

我的包在依赖项中有安装工具。我试图在安装我的包时限制 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。

为什么会忽略要求?我怎样才能让它不安装最新版本?

看起来很准确,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 build-system 要求)和安装时间(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.tomlinstall_requires 的开头 setup.py.

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