Хтось стикається з цим попередженням під час виконання 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, але це не стандартно, і всі, хто бажає використовувати ваш пакунок, повинні мати встановлені настройки.
pip, то як мені запустити setup.pyфайл, якщо я хочу створити лише розширення на місці?
python setup.py sdistта встановити його pip install resulting_package.tar.gz. Ви також можете використовувати pip install -eдля установки безпосередньо з джерела, але я завжди вважав за краще встановлювати з пакету або з сховища безпосередньо ..
pip install pendulum==1.4.4. Запуск pip install setuptools --upgradeочистив помилку.
Це був перший результат мого пошуку в Google, але відповіді не було. Я виявив, що оновлення setuptools вирішило проблему для мене (і піп на корисну міру)
pip install --upgrade pip
pip install --upgrade setuptools
Сподіваюся, це допоможе наступній людині знайти це посилання!
pip3 install neovim-remote.)
УВАГА ! УВАГА ! Попереду недосконала відповідь. Щоб отримати "останню примітку" про стан упаковки у Всесвіті Python, прочитайте цей досить докладний нарис .
Я щойно зіткнувся з цією проблемою, намагаючись створити / встановити ansible. Здається, проблема полягає в тому, що distutils дійсно не підтримує install_requires. Setuptools повинен мавпа-патч дистрибутивів на ходу, але це не так, мабуть, тому, що останній випуск setuptools становить 0,6c11 з 2009 року, тоді як distutils - це основний проект Python.
Тож навіть після встановлення setuptools-0.6c11-py2.7.egg, встановленого setup.py вручну, вибирає тільки distutils dist.py, а не той, який використовується з сайту-пакети / setuptools /.
Також документація setuptools натякає на використання ez_setup, а не distutils.
Однак налаштування setptools тепер забезпечується дистрибутивом , і цей аромат setup () підтримує install_requires.
setuptoolsі distributeпроекти знаходяться в процесі злиття разом, але злиття не завершено поки (я буду оновлювати цю статтю , як тільки що змінюється). " Хтось знає, який зараз стан речей на 2019 рік? Коли дата закінчення життя Python 2.7 швидко наближається, багато пакетів python буде в процесі оновлення та повторної упаковки.
Я на Mac з python 2.7.11. Я грав із створенням надзвичайно простих і простих проектів, де моя єдина вимога - я можу запускати python setup.py installта setup.pyвикористовувати команду настройки, в ідеалі від distutils. Буквально немає іншого імпорту чи коду, окрім того, 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 повинні відслідковувати setuptools, і що вони мали проблему при встановленні Ansible. Здається, Ansible намагався дозволити встановлення, не маючи setuptools в минулому, а потім повернувся до цього.
https://github.com/ansible/ansible/blob/devel/setup.py
Багато чого в повітрі ... але якщо ви шукаєте просту відповідь на простий проект, вам, ймовірно, слід просто імпортувати налаштування.
import setuptoolsтакож дивом вирішило проблему для мене на ubuntu 16.04 з python 3.5.
Це попередження від distutils і є знаком того, що у вас не встановлені настройки. Якщо встановити його з 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
Він встановить будь-які відсутні заголовки. Це вирішило моє питання
На закінчення :
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 і використовувати тільки requirements.txt зpipentry_pointsна scripts( doc ) та рефакторировать будь-які модулі, які покладаються на entry_pointsповні сценарії з шебангами та точкою входу.Наскільки я можу сказати, це помилка в setuptools, де вона не видаляє конкретні параметри setuptools перед тим, як викликати базовий клас у стандартній бібліотеці: https://bitbucket.org/pypa/setuptools/issue/29 / Avoid-попередження користувачів-випромінюється при дзвінку
Якщо у вас є безумовні import setuptoolsв вашому setup.py(як слід , якщо з допомогою Setuptools конкретних варіантів), то факт , що сценарій не підведе з ImportErrorуказует на те, що Setuptools правильно встановлений.
Ви можете замовкнути попередження так:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Тільки робити це , якщо ви використовуєте безумовний імпорт , який буде повністю вийде з ладу , якщо Setuptools не встановлено :)
(Я бачу таку саму поведінку в касі з репо-репортажу після злиття, тому я впевнений, що це помилка setuptools, а не проблема конфігурації системи. Я очікую, що подібна передача перед об'єднанням матиме ту саму проблему)
Зараз я бачив це в застарілих інструментах, що використовують Python2.7, де збірка (як Dockerfile) встановлює незакріплену залежність, наприклад, pytest. PyTest відмовився від підтримки Python 2.7, тому вам може знадобитися вказати версію <новий випуск пакета.
Або кусайте кулю і перетворіть цю програму на Python 3, якщо це життєздатно.