Установите определенную версию 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,!=20.0,!=20.0.1,<21", "wheel"]  # PEP 508 specifications.

Однако при установке моего пакета с помощью pip он загружает последнюю версию setuptools 50.3.0.

Почему игнорирует требования? Как сделать так, чтобы не устанавливалась последняя версия?

3 ответа

Решение

Благодаря ответам и комментариям могу сделать вывод.

Чтобы использовать конкретную версию Setuptools необходимо иметь его в обоих местах - в pyproject.toml и в начале install_requires в setup.py.

Такой инструмент, как pip, будет использовать версию из pyproject.toml для сборки проекта. Однако, если есть какая-либо зависимость, в требованиях которой содержится последняя версия setuptools, то для установки зависимости будет использоваться последняя версия. Кроме того, среда сохранит последнюю установленную версию.

Я думаю, вы запутались во времени сборки (требуется setup_requires / pyproject.toml build-system) и времени установки (install_requires). во время установки вы получаете незакрепленные инструменты установки, потому что это транзитивная зависимость без ограничений версии

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

я использую visualize-requirementsиз инструмента, который я написал, под названием инструменты-требования

Кажется точным, 50.3.0 больше 40.0, меньше 51 и не равно 46.0 или 50.0. Возможно, вам придется еще больше ограничить свои требования. Если вы знаете, какую версию хотите, просто укажите это явно

РЕДАКТИРОВАТЬ:

Я создал свежий венв и проверил 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
Другие вопросы по тегам