Tritt bei der Ausführung python setup.py install
eines PyPI-Pakets jemand auf diese Warnung auf ?
install_requires
definiert, was das Paket benötigt. Viele PyPI-Pakete haben diese Option. Wie kann es eine "unbekannte Verteilungsoption" sein?
Tritt bei der Ausführung python setup.py install
eines PyPI-Pakets jemand auf diese Warnung auf ?
install_requires
definiert, was das Paket benötigt. Viele PyPI-Pakete haben diese Option. Wie kann es eine "unbekannte Verteilungsoption" sein?
Antworten:
python setup.py
verwendet distutils, die install_requires nicht unterstützen. setuptools vertreibt auch (seinen Nachfolger) und pip (der beides verwendet). Aber du musst sie tatsächlich benutzen. Dh setuptools über den easy_install
Befehl oder aufrufen pip install
.
Eine andere Möglichkeit besteht darin, das Setup von setuptools in Ihre setup.py zu importieren. Dies ist jedoch kein Standard und führt dazu, dass jeder, der Ihr Paket verwenden möchte, setuptools installiert haben muss.
pip
. Wie führe ich die setup.py
Datei dann aus, wenn ich nur eine Erweiterung direkt erstellen möchte?
python setup.py sdist
und installieren können pip install resulting_package.tar.gz
. Sie können auch verwenden pip install -e
, um direkt von der Quelle zu installieren, aber ich habe es immer vorgezogen, vom Paket oder vom Repository direkt zu installieren.
pip install pendulum==1.4.4
. Durch Ausführen pip install setuptools --upgrade
wurde der Fehler behoben.
Dies war das erste Ergebnis meiner Google-Suche, hatte aber keine Antwort. Ich fand, dass das Upgrade von setuptools das Problem für mich löste (und pip für ein gutes Maß)
pip install --upgrade pip
pip install --upgrade setuptools
Hoffe das hilft der nächsten Person diesen Link zu finden!
pip3 install neovim-remote
.)
ACHTUNG ! ACHTUNG ! Unvollkommene Antwort voraus. Lesen Sie diesen ziemlich detaillierten Aufsatz, um das "neueste Memo" zum Zustand der Verpackung im Python-Universum zu erhalten .
Ich bin gerade auf dieses Problem gestoßen, als ich versucht habe, ansible zu erstellen / zu installieren. Das Problem scheint zu sein, dass distutils install_requires wirklich nicht unterstützt . Setuptools sollten Distutils im laufenden Betrieb mit Affen patchen, dies ist jedoch nicht der Fall, wahrscheinlich weil die letzte Version von Setuptools ab 2009 0.6c11 ist, während Distutils ein Kernprojekt von Python ist.
Selbst nach der manuellen Installation von setuptools-0.6c11-py2.7.egg nimmt setup.py nur distutils dist.py auf und nicht das von site-packages / setuptools /.
Außerdem enthält die Dokumentation zu setuptools Hinweise zur Verwendung von ez_setup und nicht von distutils.
Setuptools wird heutzutage jedoch selbst von Distribute bereitgestellt , und diese Variante von setup () unterstützt install_requires.
setuptools
und distribute
Projekte werden gerade wieder zusammengeführt, aber die Fusion ist noch nicht abgeschlossen (ich werde diesen Aufsatz so bald wie möglich aktualisieren das ändert sich). " Weiß jemand, wie der Stand der Dinge bis 2019 ist? Da sich das End of Life-Datum von Python 2.7 schnell nähert, werden viele Python-Pakete aktualisiert und neu verpackt.
Ich bin auf einem Mac mit Python 2.7.11. Ich habe damit gespielt, extrem einfache und unkomplizierte Projekte zu erstellen, bei denen meine einzige Anforderung darin besteht, dass ich den Setup-Befehl ausführen python setup.py install
und setup.py
verwenden kann, idealerweise von distutils aus. Es gibt buchstäblich keine anderen Importe oder Codes außer den kwargs zu setup()
anderen als dem, was ich hier notiere .
Ich erhalte die Fehlermeldung, wenn die Importe für meine setup.py
Datei sind:
from distutils.core import setup
Wenn ich dies benutze, erhalte ich Warnungen wie
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unbekannte Verteilungsoption: 'entry_points' warnings.warn ( Nachricht)
Wenn ich die Importe (und sonst nichts ) wie folgt ändere :
from distutils.core import setup
import setuptools # noqa
Die Warnungen verschwinden.
Beachten Sie, dass ich nicht verwende setuptools
. Durch einfaches Importieren wird das Verhalten so geändert, dass keine Warnungen mehr ausgegeben werden. Für mich ist dies die Ursache für einen wirklich verblüffenden Unterschied, bei dem einige Projekte, die ich verwende, diese Warnungen geben, andere nicht.
Es ist klar, dass irgendeine Form von Affen-Patching stattfindet, und es hängt davon ab, ob dieser Import durchgeführt wird oder nicht. Dies ist wahrscheinlich nicht die Situation für alle, die dieses Problem untersuchen, aber für die enge Umgebung, in der ich arbeite, ist dies die Antwort, nach der ich gesucht habe.
Dies steht im Einklang mit dem anderen (Community-) Kommentar, der besagt, dass Distutils Setuptools monkeypatchen sollten und dass sie das Problem bei der Installation von Ansible hatten. Ansible scheint versucht zu haben, Installationen zuzulassen, ohne in der Vergangenheit Setuptools zu haben, und ging dann darauf zurück.
https://github.com/ansible/ansible/blob/devel/setup.py
Es liegt viel in der Luft ... aber wenn Sie nach einer einfachen Antwort für ein einfaches Projekt suchen, sollten Sie wahrscheinlich nur Setuptools importieren.
import setuptools
auch auf wundersame Weise löste das Problem für mich auf Ubuntu 16.04 mit Python 3.5.
Dies ist eine Warnung von distutils und ein Zeichen dafür, dass Sie keine Setuptools installiert haben. Durch die Installation von http://pypi.python.org/pypi/setuptools wird die Warnung entfernt.
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
Fehlende Header werden installiert. Es hat mein Problem gelöst
Fazit :
distutils
nicht unterstützt install_requires
oder entry_points
, setuptools
tut.
Änderung from distutils.core import setup
in setup.py zu from setuptools import setup
oder Refaktorieren setup.py zu verwenden , nur distutils
verfügt.
Ich kam hierher, weil ich nicht bemerkt hatte, dass entry_points
es nur ein setuptools
Feature war.
Wenn Sie hier sind, um mich setuptools
zu distutils
mögen:
install_requires
von setup.py und verwenden nur requirements.txt mitpip
entry_points
zu scripts
( doc ) und überarbeiten Sie alle Module entry_points
, die vollständige Skripte mit Shebangs und einem Einstiegspunkt benötigen.Soweit ich das beurteilen kann, handelt es sich um einen Fehler in setuptools, bei dem die setuptools-spezifischen Optionen nicht entfernt werden, bevor die Basisklasse in der Standardbibliothek aufgerufen wird: https://bitbucket.org/pypa/setuptools/issue/29 / Vermeiden Sie Benutzerwarnungen, die beim Aufruf ausgegeben werden
Wenn Sie einen unbedingten haben import setuptools
in Ihrem setup.py
(wie sollten Sie die Setuptools bestimmte Optionen bei der Anwendung), dann die Tatsache , das Skript nicht versagt ImportError
zeigt an, dass Setuptools richtig installiert ist .
Sie können die Warnung wie folgt stumm schalten:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Nur dies tut , wenn Sie den bedingungslosen Import verwenden , die völlig fehl , wenn Setuptools nicht installiert ist :)
(Ich sehe dasselbe Verhalten beim Auschecken aus dem Setuptools-Repo nach dem Zusammenschluss, weshalb ich zuversichtlich bin, dass es sich eher um einen Setuptools-Fehler als um ein Systemkonfigurationsproblem handelt. Ich gehe davon aus, dass die Verteilung vor dem Zusammenführen das gleiche Problem haben würde.)
Ich habe dies jetzt in älteren Tools mit Python2.7 gesehen, in denen ein Build (wie eine Docker-Datei) eine nicht fixierte Abhängigkeit installiert, z. B. pytest. PyTest hat die Python 2.7-Unterstützung eingestellt, daher müssen Sie möglicherweise die Version <der neuen Paketversion angeben.
Oder beißen Sie in die Kugel und konvertieren Sie diese App in Python 3, wenn dies möglich ist.