Czy ktoś napotyka to ostrzeżenie podczas wykonywania python setup.py installpakietu PyPI?
install_requiresokreśla, czego wymaga pakiet. Wiele pakietów PyPI ma tę opcję. Jak to może być „nieznana opcja dystrybucji”?
Czy ktoś napotyka to ostrzeżenie podczas wykonywania python setup.py installpakietu PyPI?
install_requiresokreśla, czego wymaga pakiet. Wiele pakietów PyPI ma tę opcję. Jak to może być „nieznana opcja dystrybucji”?
Odpowiedzi:
python setup.pyużywa distutils, które nie obsługują install_requires. setuptools robi, także dystrybuuje (jego następca) i pip (który używa jednego z nich) do. Ale tak naprawdę musisz ich użyć. To znaczy wywołaj setuptools za pomocą easy_installpolecenia lub pip install.
Innym sposobem jest zaimportowanie instalacji z setuptools do twojego setup.py, ale to nie jest standardowe i sprawia, że każdy, kto chce używać twojego pakietu, musi mieć zainstalowane setuptools.
pip, a jak uruchomić setup.pyplik, jeśli chcę tylko zbudować rozszerzenie na miejscu?
python setup.py sdisti zainstalować z pip install resulting_package.tar.gz. Możesz także użyć pip install -edo instalacji bezpośrednio ze źródła, ale zawsze wolałem instalować z pakietu lub bezpośrednio z repozytorium.
pip install pendulum==1.4.4. Uruchomienie pip install setuptools --upgradeusunęło błąd.
To był pierwszy wynik w mojej wyszukiwarce Google, ale nie miał odpowiedzi. Zauważyłem, że uaktualnienie setuptools rozwiązało problem za mnie (i pip na dobrą miarę)
pip install --upgrade pip
pip install --upgrade setuptools
Mam nadzieję, że pomoże to następnej osobie znaleźć ten link!
pip3 install neovim-remote.)
UWAGA ! UWAGA ! Niedoskonała odpowiedź przed nami. Aby uzyskać „najnowszą notatkę” na temat stanu opakowań we wszechświecie Pythona, przeczytaj ten dość szczegółowy esej .
Właśnie napotkałem ten problem podczas próby zbudowania / zainstalowania ansibla. Wydaje się, że problem polega na tym, że distutils naprawdę nie obsługują install_requires. Setuptools powinny małpować dystrybucje w locie, ale tak się nie dzieje, prawdopodobnie dlatego, że ostatnia wersja setuptools to 0.6c11 z 2009 roku, podczas gdy distutils jest podstawowym projektem Pythona.
Więc nawet po ręcznej instalacji setuptools-0.6c11-py2.7.egg, uruchomione setup.py pobiera tylko distutils dist.py, a nie ten z site-packages / setuptools /.
Również dokumentacja setuptools zawiera wskazówki dotyczące używania ez_setup, a nie distutils.
Jednak samo narzędzie setuptools jest obecnie dostarczane przez dystrybucję , a ten wariant setup () obsługuje install_requires.
setuptoolsi distributesą w trakcie ponownego scalania, ale połączenie nie jest jeszcze zakończone (zaktualizuję ten esej, gdy tylko to się zmienia) ”. Czy ktoś wie, jaki jest dotychczasowy stan rzeczy na 2019 rok? Ponieważ data końca życia Pythona 2.7 szybko się zbliża, wiele pakietów Pythona będzie w trakcie aktualizacji i ponownego pakowania.
Jestem na komputerze Mac z Pythonem 2.7.11. Bawiłem się tworzeniem niezwykle prostych i nieskomplikowanych projektów, których jedynym wymaganiem jest to, że potrafię uruchomić python setup.py installi setup.pyużywać polecenia setup, najlepiej z distutils. Nie ma dosłownie żadnych innych importów ani kodów poza kwargami do setup()innych niż to, co tutaj odnotowałem.
Pojawia się błąd, gdy importy mojego setup.pypliku to:
from distutils.core import setup
Kiedy tego używam, otrzymuję ostrzeżenia, takie jak
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Nieznana opcja dystrybucji: 'entry_points' warnings.warn ( msg)
Jeśli zmienię import (i nic więcej ) na następujące:
from distutils.core import setup
import setuptools # noqa
Ostrzeżenia znikają.
Zauważ, że nie używam setuptools, po prostu importowanie zmienia zachowanie tak, że nie emituje już ostrzeżeń. Dla mnie to jest przyczyną naprawdę zaskakującej różnicy, w której niektóre projekty, których używam, dają takie ostrzeżenia, a inne nie.
Najwyraźniej zachodzi jakaś forma małpiego łatania i wpływa na nią to, czy import jest wykonywany, czy nie. Prawdopodobnie nie jest to sytuacja dla wszystkich badających ten problem, ale dla wąskiego środowiska, w którym pracuję, jest to odpowiedź, której szukałem.
Jest to zgodne z innym komentarzem (społeczności), który mówi, że distutils powinny monkeypatch setuptools i że mieli problem podczas instalowania Ansible. Wygląda na to, że Ansible próbował zezwolić na instalacje bez korzystania z narzędzi konfiguracyjnych w przeszłości, a następnie wrócił do tego.
https://github.com/ansible/ansible/blob/devel/setup.py
Wiele rzeczy unosi się w powietrzu ... ale jeśli szukasz prostej odpowiedzi na prosty projekt, prawdopodobnie powinieneś po prostu zaimportować narzędzia konfiguracyjne.
import setuptoolsrównież w cudowny sposób rozwiązało problem na Ubuntu 16.04 z Pythonem 3.5.
To jest ostrzeżenie od distutils i oznacza, że nie masz zainstalowanych narzędzi setuptools. Zainstalowanie go z http://pypi.python.org/pypi/setuptools usunie ostrzeżenie.
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
Zainstaluje brakujące nagłówki. To rozwiązało mój problem
Podsumowując :
distutilsnie obsługuje install_requireslub entry_points, setuptoolstak.
Zmiany from distutils.core import setupw setup.py do from setuptools import setuplub Refactor swojej setup.py używać tylko distutilsfunkcji.
Przyjechałem tutaj, ponieważ nie zdawałem sobie sprawy, że entry_pointsto tylko setuptoolsfunkcja.
Jeśli jesteś tutaj i chcesz przekonwertować się setuptoolsdo distutilsmnie:
install_requiresz setup.py i po prostu użyć requirements.txt zpipentry_pointsna scripts( doc ) i zrefaktoryzuj wszystkie moduły entry_pointswymagające pełnych skryptów z shebangami i punktem wejścia.O ile wiem, jest to błąd w setuptools, który nie usuwa opcji specyficznych dla setuptools przed wywołaniem klasy bazowej w bibliotece standardowej: https://bitbucket.org/pypa/setuptools/issue/29 / unikaj-userwarnings-emitted-when-call
Jeśli masz bezwarunkowe import setuptoolsw swoją setup.py(jak powinien, jeśli za pomocą setuptools konkretnych opcjach), to fakt, że skrypt nie zawodzi z ImportErrorwskazuje, że setuptools jest prawidłowo zainstalowana.
Możesz wyciszyć ostrzeżenie w następujący sposób:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Tylko to zrobić, jeśli używasz bezwarunkowe importu, które będą całkowicie powiedzie się, jeśli nie jest zainstalowane setuptools :)
(Widzę to samo zachowanie w kasie z repozytorium setuptools po fuzji, dlatego jestem przekonany, że jest to błąd setuptools, a nie problem z konfiguracją systemu. Spodziewam się, że dystrybucja przed scaleniem miałaby ten sam problem)
Widziałem to teraz w starszych narzędziach używających Python2.7, gdzie kompilacja (jak plik Dockerfile) instaluje odpiętą zależność, na przykład pytest. PyTest porzucił obsługę Pythona 2.7, więc może być konieczne określenie wersji <nowej wersji pakietu.
Lub ugryź się w kulę i przekonwertuj tę aplikację na Python 3, jeśli jest to wykonalne.