Хтось стикається з цим попередженням під час виконання 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 зpip
entry_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, якщо це життєздатно.