web-dev-qa-db-de.com

pypi UserWarning: Unbekannte Distributionsoption: 'install_requires'

Tritt diese Warnung bei der Ausführung von python setup.py install Eines PyPI-Pakets auf?

install_requires Definiert, was das Paket benötigt. Viele PyPI-Pakete haben diese Option. Wie kann es eine "unbekannte Distributionsoption" sein?

91
Tyler Long

python setup.py verwendet distutils, die install_requires nicht unterstützen. setuptools tut dies, verteilt auch (seinen Nachfolger) und pip (der beides verwendet). Aber Sie müssen sie tatsächlich verwenden. Das heißt Rufe setuptools durch das easy_install Befehl oder pip install.

Eine andere Möglichkeit besteht darin, Setup aus setuptools in Ihre setup.py-Datei zu importieren. Dies ist jedoch kein Standard, und jeder, der Ihr Paket verwenden möchte, muss setuptools installiert haben.

80
Sebastian Blask

Dies war das erste Ergebnis meiner Google-Suche, hatte aber keine Antwort. Ich habe festgestellt, dass das Upgrade von Setuptools das Problem für mich gelöst hat (und Pip für eine gute Maßnahme).

pip install --upgrade pip
pip install --upgrade setuptools

Hoffe das hilft der nächsten Person diesen Link zu finden!

17
Matt

[~ # ~] Aufmerksamkeit [~ # ~] ! [~ # ~] Aufmerksamkeit [~ # ~] ! Unvollständige Antwort voraus. Um das "neueste Memo" zum Verpackungsstatus im Python Universum zu erhalten, lesen Sie diesen ziemlich detaillierten Aufsatz .

Ich bin gerade auf dieses Problem gestoßen, als ich versucht habe, ansible zu bauen/zu installieren. Das Problem scheint zu sein, dass distutils wirklich nterstützt nicht install_requires. Setuptools sollte Monkey-Patch Distutils on-the-fly, aber nicht, wahrscheinlich, weil die letzte Version von Setuptools 0.6c11 aus dem Jahr 2009 ist, während Distutils ein Kern ist Python Projekt.

Auch 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 /.

In der Dokumentation zu setuptools wird auch darauf hingewiesen, ez_setup und keine distutils zu verwenden.

Setuptools selbst wird heutzutage jedoch von distribute bereitgestellt, und diese Variante von setup () unterstützt install_requires.

15
PAStheLoD

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 Voraussetzung ist, dass ich python setup.py install Ausführen kann, und Soll setup.py den Befehl setup verwenden, idealerweise von distutils. Außer dem, was ich hier notiere, gibt es buchstäblich keinen anderen Import oder Code als kwargs to setup().

Ich erhalte die Fehlermeldung, wenn die Importe für meine setup.py - Datei wie folgt lauten:

from distutils.core import setup

Wenn ich das benutze, bekomme 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 ( msg)

Wenn ich die Importe (und nichts anderes ) in folgendes ändere:

from distutils.core import setup
import setuptools  # noqa

Die Warnungen gehen weg.

Beachten Sie, dass ich setuptools nicht verwende, sondern nur importiere , um das Verhalten so zu ändern, dass die Warnungen nicht 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 ausdrücken und andere nicht.

Es ist klar, dass eine 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 das Problem bei der Installation von Ansible aufgetreten ist. Ansible scheint versucht zu haben, Installationen ohne Setuptools in der Vergangenheit zuzulassen, und ging dann darauf zurück.

https://github.com/ansible/ansible/blob/devel/setup.py

Vieles ist in der Luft ... aber wenn Sie nach einer einfachen Antwort für ein einfaches Projekt suchen, sollten Sie wahrscheinlich nur Setuptools importieren.

9
AlanSE

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.

8
Fredrik Håård
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

4

Soweit ich weiß, ist dies ein 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-von-Benutzerwarnungen-beim-Aufrufen

Wenn Sie einen unbedingten import setuptools In Ihrem setup.py Haben (wie Sie es sollten, wenn Sie die setuptools-spezifischen Optionen verwenden), zeigt die Tatsache, dass das Skript mit ImportError nicht fehlschlägt, an, dass setuptools ist richtig installiert.

Sie können die Warnung wie folgt stumm schalten:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

Nur , wenn Sie den bedingungslosen Import verwenden, der vollständig fehlschlägt, wenn setuptools nicht installiert ist :)

(Ich sehe dasselbe Verhalten in einem Checkout aus dem Post-Merger-Setuptools-Repo. Aus diesem Grund bin ich zuversichtlich, dass es sich eher um einen Setuptools-Bug als um ein Systemkonfigurationsproblem handelt. Ich gehe davon aus, dass Pre-Merge Distribute dasselbe Problem haben würde.)

2
ncoghlan

Ich habe dies jetzt in älteren Tools mit Python 2.7 gesehen, in denen ein Build (wie ein Dockerfile) eine nicht fixierte Abhängigkeit installiert, zum Beispiel pytest. PyTest hat die Python 2.7-Unterstützung eingestellt, daher müssen Sie möglicherweise Version <der neuen Paketversion angeben.

Oder beißen Sie die Kugel und konvertieren Sie diese App zu Python 3, wenn das möglich ist.

0
Danny Staple