pypi UserWarning: Неизвестный вариант распространения: «install_requires»

Кто-нибудь сталкивается с этим предупреждением при выполнении python setup.py install пакета PyPI?

install_requires определяет, что требуется пакету. Многие пакеты PyPI имеют эту опцию. Как это может быть "неизвестный вариант распространения"?


person Tyler Long    schedule 28.11.2011    source источник
comment
Возможный дубликат добавления install_requires для установки. py при создании пакета Python   -  person tripleee    schedule 02.10.2017
comment
@tripleee может быть, но этот вопрос был задан раньше, чем тот.   -  person Tyler Long    schedule 06.10.2017
comment
Возраст вопроса — это второстепенная проблема, но в любом случае у меня нет твердого мнения. Если вы хотите, чтобы номинация дубликатов происходила наоборот, создайте вопрос Meta Stack Overflow для наглядности. Лично для меня принятый ответ на другой вопрос помог мне больше, потому что он более прямой и целенаправленный. Похоже, вы никогда не принимали ни один из этих ответов, так что это фактор, который вы действительно можете изменить.   -  person tripleee    schedule 06.10.2017
comment
@tripleee, если вы внимательно прочитаете эту ветку, вы поймете, что идеального ответа вообще нет. Поэтому я не знаю, какой ответ принять. Я не хочу вводить людей в заблуждение, выбирая ответ, который не может убедить даже меня.   -  person Tyler Long    schedule 08.10.2017
comment
Пожалуйста, следуйте официальной документации и используйте import setuptools; setuptools.setup(). См.: packaging.python.org/tutorials/packaging-projects/< /а>   -  person guettli    schedule 10.09.2020


Ответы (10)


python setup.py использует distutils, который не поддерживает install_requires. setuptools делает, а также Distributed (его преемник) и pip (который использует любой из них). Но на самом деле вы должны использовать их. т.е. вызвать setuptools через команду easy_install или pip install.

Другой способ — импортировать установку из setuptools в ваш setup.py, но это нестандартно и заставляет всех, кто хочет использовать ваш пакет, установить setuptools.

person Sebastian Blask    schedule 21.05.2012
comment
Скажем, я хочу использовать pip, тогда как мне запустить файл setup.py, если я хочу только построить расширение на месте? - person Fred Foo; 24.05.2012
comment
Предупреждение не мешает вам упаковать свой код, поэтому вы можете запустить python setup.py sdist и установить его с помощью pip install resulting_package.tar.gz. Вы также можете использовать pip install -e для установки непосредственно из исходного кода, но я всегда предпочитал устанавливать напрямую из пакета или из репозитория. - person Sebastian Blask; 24.05.2012
comment
Это немного запутано. Вы всегда можете попытаться сначала импортировать настройки из setuptools, в противном случае используйте distutils и получите предупреждение. Однако, если это в pypy, вы можете получить слишком много открытых файлов из-за того, что setuptools не закрывает дескрипторы должным образом (даже в Debian с ulimit -n по умолчанию 1024): bugs.pypy.org/issue878 - person fiorix; 13.06.2012
comment
Смотрите мой ответ - насколько я могу судить, это просто ошибка в setuptools. Пользователь не делает ничего плохого, это setuptools. - person ncoghlan; 02.07.2013
comment
Это косвенно отвечает на мой вопрос: я получил ошибку в результате запуска pip install pendulum==1.4.4. Запуск pip install setuptools --upgrade устранил ошибку. - person Throw Away Account; 02.05.2019

Это был первый результат моего поиска в Google, но ответа не было. Я обнаружил, что обновление setuptools решило проблему для меня (и для хорошей меры)

pip install --upgrade pip
pip install --upgrade setuptools

Надеюсь, это поможет следующему человеку найти эту ссылку!

person Matt    schedule 22.08.2018
comment
Это решило это и для меня. (Python 3.4, попытка pip3 install neovim-remote.) - person Michael Iles; 10.12.2018
comment
Это сработало для меня. Пытался установить mako на Python 2.7.16. Получил аналогичный вариант Unknown Distribution. Pip был в порядке, но setuptools перешел на 41.0.1 с 40.6.2. Затем Mako установил A-OK. - person Max Yaffe; 11.08.2019
comment
Большое спасибо, работал на Python 3.8.5. - person Kerem Nayman; 05.12.2020

Я на Mac с питоном 2.7.11. Я играл с созданием чрезвычайно простых и прямолинейных проектов, где мое единственное требование состоит в том, чтобы я мог запустить python setup.py install, а setup.py использовать команду установки, в идеале из distutils. Буквально нет никакого другого импорта или кода, кроме kwargs в setup(), кроме того, что я здесь отметил.

Я получаю сообщение об ошибке, когда импорт для моего файла setup.py:

from distutils.core import setup

Когда я использую это, я получаю предупреждения, такие как

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Неизвестный вариант распространения: 'entry_points' warnings.warn( сообщение)

Если я изменю импорт (и ничего другого) на следующее:

from distutils.core import setup
import setuptools  # noqa

Предупреждения исчезают.

Обратите внимание, что я не использую setuptools, а просто импортирую, он меняет поведение таким образом, что он больше не выдает предупреждения. Для меня это причина действительно непонятной разницы, когда некоторые проекты, которые я использую, выдают эти предупреждения, а некоторые нет.

Ясно, что происходит какая-то форма обезьяньих исправлений, и на нее влияет то, выполняется ли этот импорт. Это, вероятно, ситуация не для всех, исследующих эту проблему, но для узкой среды, в которой я работаю, это ответ, который я искал.


Это согласуется с другим (сообществом) комментарием, в котором говорится, что distutils должны устанавливать инструменты установки monkeypatch, и что у них возникла проблема при установке Ansible. В прошлом Ansible пытался разрешить установку без инструментов настройки, а затем вернулся к этому.

https://github.com/ansible/ansible/blob/devel/setup.py

Многое витает в воздухе... но если вы ищете простой ответ для простого проекта, вам, вероятно, следует просто импортировать setuptools.

person AlanSE    schedule 06.06.2018
comment
Добавление import setuptools также чудесным образом решило проблему для меня в Ubuntu 16.04 с Python 3.5. - person kuropan; 24.01.2019

ВНИМАНИЕ! ВНИМАНИЕ! Несовершенный ответ впереди. Чтобы получить «последнюю заметку» о состоянии упаковки во вселенной Python, прочитайте это довольно подробное эссе.

Я только что столкнулся с этой проблемой при попытке собрать/установить ansible. Проблема в том, что distutils действительно не поддерживает install_requires . Setuptools должны обезьяна-патч distutils на лету, но это не так, вероятно, потому что последний выпуск setuptools 0.6c11 от 2009 года, тогда как distutils является основным проектом Python.

Так что даже после ручной установки setuptools-0.6c11-py2.7.egg запущенный setup.py подхватывает только distutils dist.py, а не тот, что находится в site-packages/setuptools/.

Также документация по setuptools намекает на использование ez_setup, а не distutils .

Однако в настоящее время setuptools сам предоставляется distribute, и этот вариант setup() поддерживает install_requires.

person Community    schedule 21.05.2012
comment
Проголосовали против, так как этот ответ содержит некоторую дезинформацию и путаницу в отношении того, что это разные вещи. ez_setup.py, например, является загрузочным установщиком для setuptools, и его нельзя использовать вместо distutils. Большинство пакетов PyPI не просто ошибочны. - person Iguananaut; 04.06.2013
comment
@Iguananaut, спасибо за рассмотрение ответа; Я отредактировал это. - person PAStheLoD; 05.06.2013
comment
О круто, спасибо. В этом случае я проголосую повторно :) Эссе Ника Коглана, на которое вы ссылались, — это то, чем я поделился со своими коллегами, прежде чем попытаться заставить их осознать этот материал. - person Iguananaut; 05.06.2013
comment
Отличное эссе о состоянии дел в марте 2013 года. Один вопрос... Автор заявляет: Проекты setuptools и distribute находятся в процессе объединения, но слияние еще не завершено (я обновлю это эссе, как только как это меняется). Кто-нибудь знает, как обстоят дела на 2019 год? Поскольку дата окончания жизни Python 2.7 быстро приближается, многие пакеты Python будут находиться в процессе обновления и переупаковки. - person TrinitronX; 01.10.2019

Это предупреждение от distutils и признак того, что у вас не установлены setuptools. Установка с сайта http://pypi.python.org/pypi/setuptools удалит предупреждение.

person Fredrik Håård    schedule 28.11.2011
comment
setuptools установлен. еще есть предупреждение. - person Tyler Long; 29.11.2011
comment
Вы совершенно правы, я получаю эту ошибку в Python 2.6.6, даже если установлены setuptools или дистрибутив. Если я попробую с 2.7.2, это все равно исчезнет. - person Fredrik Håård; 29.11.2011
comment
У меня эта проблема в python 2.7.3 - person Calvin Cheng; 09.05.2012
comment
Это помогло мне: wget bootstrap.pypa.io/ez_setup.py -O - | судо питон - person radtek; 30.12.2014
comment
Спасибо, @radtek, у меня это тоже сработало. Возможно, вы могли бы превратить свой комментарий в ответ? - person Esteis; 26.05.2015
comment
У меня была эта проблема в python 2.7.6 при установке setuptools из исходного кода после установки pip uninstall setuptools. Вместо этого выполните python setup.py install для setuptools, пока setuptools еще установлен. - person Ioannis Filippidis; 25.01.2016

В заключение:

distutils не поддерживает install_requires или entry_points, setuptools поддерживает.

измените from distutils.core import setup в setup.py на from setuptools import setup или реорганизуйте файл setup.py, чтобы использовать только distutils функции.

Я пришел сюда, потому что не знал, что entry_points — это всего лишь функция setuptools.

Если вы хотите преобразовать setuptools в distutils, как я:

  1. удалите install_requires из setup.py и просто используйте requirements.txt с pip
  2. измените entry_points на scripts (doc) и реорганизуйте все модули, полагающиеся на entry_points должны быть полноценные скрипты с шебангами и точкой входа.
person Karsten    schedule 04.10.2019
comment
Я пытаюсь понять, что такое рекомендуемый пакет. Вы пишете, что используете только функции distutils, также конвертируете setuptools в distutils, но также указываете, что entry_points была только функцией setuptools, кажется немного противоречивым? - person chrisinmtown; 08.10.2019

sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

Он установит все недостающие заголовки. Это решило мою проблему

person Priyanshu Chauhan    schedule 17.07.2017

Насколько я могу судить, это ошибка в setuptools, когда она не удаляет определенные параметры setuptools перед вызовом базового класса в стандартной библиотеке: https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

Если у вас есть безусловный import setuptools в вашем setup.py (как и должно быть, если вы используете специальные параметры setuptools), то тот факт, что сценарий не завершается ошибкой с ImportError, указывает на то, что setuptools установлен правильно.

Вы можете отключить предупреждение следующим образом:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

Только делайте это, если вы используете безусловный импорт, который полностью завершится ошибкой, если setuptools не установлен :)

(Я вижу такое же поведение при оформлении заказа из репозитория setuptools после слияния, поэтому я уверен, что это ошибка setuptools, а не проблема с конфигурацией системы. Я ожидаю, что распространение перед слиянием будет иметь ту же проблему)

person ncoghlan    schedule 02.07.2013

Теперь я видел это в устаревших инструментах, использующих Python 2.7, где сборка (например, Dockerfile) устанавливает незакрепленную зависимость, например pytest. PyTest прекратил поддержку Python 2.7, поэтому вам может потребоваться указать версию ‹ нового выпуска пакета.

Или стисните зубы и преобразуйте это приложение в Python 3, если это целесообразно.

person Danny Staple    schedule 23.07.2019

Он отлично работает, если вы следуете официальной документации:

import setuptools
setuptools.setup(...)

Источник: https://packaging.python.org/tutorials/packaging-projects/#creating-setup-py

person guettli    schedule 10.09.2020