Czy ktoś napotyka to ostrzeżenie podczas wykonywania python setup.py install
pakietu PyPI?
install_requires
okreś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 install
pakietu PyPI?
install_requires
określa, czego wymaga pakiet. Wiele pakietów PyPI ma tę opcję. Jak to może być „nieznana opcja dystrybucji”?
Odpowiedzi:
python setup.py
uż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_install
polecenia 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.py
plik, jeśli chcę tylko zbudować rozszerzenie na miejscu?
python setup.py sdist
i zainstalować z pip install resulting_package.tar.gz
. Możesz także użyć pip install -e
do 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 --upgrade
usunęł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.
setuptools
i distribute
są 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 install
i setup.py
uż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.py
pliku 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 setuptools
ró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 :
distutils
nie obsługuje install_requires
lub entry_points
, setuptools
tak.
Zmiany from distutils.core import setup
w setup.py do from setuptools import setup
lub Refactor swojej setup.py używać tylko distutils
funkcji.
Przyjechałem tutaj, ponieważ nie zdawałem sobie sprawy, że entry_points
to tylko setuptools
funkcja.
Jeśli jesteś tutaj i chcesz przekonwertować się setuptools
do distutils
mnie:
install_requires
z setup.py i po prostu użyć requirements.txt zpip
entry_points
na scripts
( doc ) i zrefaktoryzuj wszystkie moduły entry_points
wymagają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 setuptools
w swoją setup.py
(jak powinien, jeśli za pomocą setuptools konkretnych opcjach), to fakt, że skrypt nie zawodzi z ImportError
wskazuje, ż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.