Кто-нибудь сталкивается с этим предупреждением при выполнении python setup.py install
пакета PyPI?
install_requires
определяет, что требует пакет. У многих пакетов PyPI есть эта опция. Как это может быть "неизвестный вариант распространения"?
Кто-нибудь сталкивается с этим предупреждением при выполнении python setup.py install
пакета PyPI?
install_requires
определяет, что требует пакет. У многих пакетов PyPI есть эта опция. Как это может быть "неизвестный вариант распространения"?
python setup.py
использует distutils, который не поддерживает install_requires. setuptools делает, также распространяет (его преемник) и pip (который использует либо) делает. Но вы действительно должны их использовать. То есть вызовите setuptools через команду easy_install
или pip install
.
Другим способом является импорт настроек из setuptools в файл setup.py, но это не стандартное и заставляет всех, кто хочет использовать ваш пакет, установить setuptools.
Это был первый результат в моем поиске в Google, но ответа не было. Я обнаружил, что обновление setuptools решило эту проблему для меня (и pip для хорошей меры)
pip install --upgrade pip
pip install --upgrade setuptools
Надеюсь, что это поможет следующему человеку найти эту ссылку!
Внимание! ВНИМАНИЕ! Несовершенный ответ впереди. Чтобы получить "последнюю заметку" о состоянии упаковки в юниверсе Python, прочитайте это довольно подробное эссе.
Я просто столкнулся с этой проблемой при попытке построить/установить ansible. Проблема заключается в том, что distutils действительно не поддерживает install_requires. Setuptools должен обезвреживать обезьяны-патча на лету, но это не так, вероятно, потому, что последняя версия setuptools с 2009 года равна 0.6c11, тогда как 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.
Я на Mac с Python 2.7.11. Я занимался созданием чрезвычайно простых и понятных проектов, где мое единственное требование - я могу запустить python setup.py install
, и чтобы setup.py
использовал команду setup, в идеале из 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(entry_points ' сбщ)
Если я изменю импорт (и ничего больше) на следующее:
from distutils.core import setup
import setuptools # noqa
Предупреждения уходят.
Обратите внимание, что я не использую setuptools
, просто его импорт изменяет поведение так, что он больше не выдает предупреждения. Для меня это является причиной поистине непонятной разницы, когда некоторые проекты, которые я использую, дают эти предупреждения, а другие нет.
Понятно, что происходит какая-то форма "обезьяньих патчей", и на нее влияет то, выполняется ли этот импорт. Вероятно, это не ситуация для всех, кто исследует эту проблему, но для узкой среды, в которой я работаю, это ответ, который я искал.
Это согласуется с другим (сообществом) комментарием, в котором говорится, что distutils должен установить monkeypatch setuptools, и что у них возникла проблема при установке Ansible. Похоже, что Ansible пытался разрешить установку, не имея setuptools в прошлом, а затем вернулся к этому.
https://github.com/ansible/ansible/blob/devel/setup.py
В воздухе много всего... но если вы ищете простой ответ для простого проекта, вам, вероятно, следует просто импортировать setuptools.
Это предупреждение от distutils и является признаком того, что у вас нет setuptools. Установка из http://pypi.python.org/pypi/setuptools приведет к удалению предупреждения.
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
Он установит любые отсутствующие заголовки. Он решил мою проблему
Насколько я могу судить, это ошибка в setuptools, где она не удаляет специфические параметры setuptools перед вызовом базового класса в стандартной библиотеке: https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling
Если у вас есть безусловный import setuptools
в вашем setup.py
(как и при использовании специальных параметров setuptools), то факт, что script не работает с ImportError
, указывает, что setuptools правильно установлен.
Вы можете отключить предупреждение следующим образом:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Выполняйте это только в том случае, если вы используете безусловный импорт, который завершится неудачно, если setuptools не установлен:)
(Я вижу такое же поведение в кассе из репозитория setuptools после слияния, поэтому я уверен, что это ошибка setuptools, а не проблема с системной конфигурацией. Я ожидаю, что распределение до слияния будет иметь одинаковый проблема)
Теперь я видел это в старых инструментах, использующих Python2.7, где сборка (например, Dockerfile) устанавливает неподкрепленную зависимость, например, pytest. PyTest прекратил поддержку Python 2.7, поэтому вам может потребоваться указать версию <выпуск нового пакета.
Или прикусите пулю и конвертируйте это приложение в Python 3, если это возможно.
В заключение:
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
, как я:
install_requires
из setup.py и просто используйте needs.txt с pip
entry_points
на scripts
(doc) и измените рефакторинг любых модулей, основанных на entry_points
, на полные сценарии с шебангами и точкой входа.