Frage

Ich habe ein gutes Stück von Setuptool auf dem Internets in letzter Zeit bashing gesehen. Vor kurzem las ich James Bennett auf der Verpackung Post auf, warum niemand sollte mit Setuptool sein. Aus meiner Zeit in #python auf Freenode, ich weiß, dass es dort ein paar Seelen sind, die absolut zuwider. Ich würde mich unter ihnen zählen, aber ich es tatsächlich nutzen.

Ich habe genug Projekte Setuptools bewusst sein, seine Mängel, und ich würde etwas besser bevorzugen. Ich mag es nicht besonders, das Ei-Format und wie es eingesetzt. Mit allen Setuptool Probleme, habe ich nicht eine bessere Alternative gefunden.

Mein Verständnis von Tools wie pip ist, dass es ein easy_install Ersatz zu sein ist gemeint (nicht Setuptools). In der Tat, pip verwendet einige Setuptools Komponenten, nicht wahr?

Die meisten meiner Pakete nutzen eine Setuptools-aware setup.py, die alle Abhängigkeiten erklärt. Wenn sie fertig sind, werde ich eine Sdist bauen, bdist und bdist_egg, und laden Sie sie auf PyPI.

Wenn ich mit pip wechseln wollte, welche Art von Änderungen würde ich brauchen, um mich von easy_install Abhängigkeiten zu befreien? Wo sind die Abhängigkeiten deklariert? Ich vermute, dass ich brauchen würde aus mit dem Ei-Format zu entfliehen und nur Quelle Distributionen bieten. Wenn ja, wie erzeuge ich die Ei-info Verzeichnisse? oder muss ich noch brauchen?

Wie würde das meine Nutzung von virtualenv ändern? Hat virtualenv nicht easy_install verwenden, um die Umgebungen zu verwalten?

Wie würde das meine Nutzung der Setuptool bereitgestellt ändern „entwickeln“ Befehl? Sollte ich das nicht? Was ist die Alternative?

Ich versuche, im Grunde ein Bild von dem, was Workflow meiner Entwicklung zu bekommen aussehen wird.

Bevor jemand es schon sagt, ich bin nicht auf der Suche für eine OS-abhängige Lösung. Ich bin vor allem mit Debian Linux, aber deb-Pakete sind keine Option, aus den Gründen, Ian Bicking umreißt hier .

War es hilfreich?

Lösung

pip verwendet Setuptools und erfordert keine Änderungen an Paketen. Es installiert tatsächlich Pakete mit Setuptool, mit:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

Weil es diese Option (--single-version-externally-managed) verwendet es nicht immer installiert Eier als Zip-Dateien, nicht mehrere gleichzeitig installierte Versionen der Software nicht unterstützt, und die Pakete sind flach installiert (wie python setup.py install funktioniert, wenn Sie nur distutils verwenden). Egg Metadaten noch installiert ist. pip auch, wie easy_install, heruntergeladen und installiert alle Anforderungen eines Pakets.

Zusätzlich Sie können auch eine Anforderungsdatei verwenden, um andere Pakete hinzufügen, die in einem Batch installiert werden sollen, und die Version Anforderungen genauer zu machen (ohne genau diese Anforderungen in Ihren setup.py Dateien zu setzen). Aber wenn Sie nicht den Anforderungen Dateien machen dann würden Sie es verwenden, wie easy_install.

Für Ihre install_requires Ich empfehle keine Änderungen, es sei denn, Sie sehr genaue Anforderungen dort zu schaffen versucht haben, die gut bekannt sind. Ich denke, es gibt eine Grenze, wie genau können Sie sinnvollerweise in setup.py Dateien über Versionen, da kann man nicht wirklich wissen, was die zukünftige Kompatibilität neuer Bibliotheken wie sein wird, und ich empfehle nicht, Sie versuchen, dies zu prognostizieren. Requirement-Dateien sind eine alternative Stelle konservative Version Anforderungen zu legen.

Sie können nach wie vor verwenden python setup.py develop, und in der Tat, wenn Sie sie pip install -e svn+http://mysite/svn/Project/trunk#egg=Project wird, dass (in src/project) überprüfen und läuft setup.py develop darauf. So dass Workflow ist nicht anders wirklich.

Wenn Sie pip verbosely laufen (wie pip install -vv) Sie werden eine Menge der Befehle sehen, die ausgeführt werden, und Sie werden wahrscheinlich die meisten von ihnen erkennen.

Andere Tipps

Ich schreibe dies im April 2014 sein, der Tag, an etwas geschrieben über Python Verpackung, Verteilung oder Installation bewusst. Es sieht aus wie es gibt einige Nachlassen der Parteilichkeit, die Verbesserung der Implementierungen, PEP-Standardisierung und Vereinheitlichung von Fronten in der letzten gewesen, sagen wir, drei Jahren.

Zum Beispiel die Python Verpackungs Authority ist „eine Arbeitsgruppe, die viele der relevanten Projekte in Python Verpackung aufrecht erhält.“

Der python.org Python Verpackung Benutzerhandbuch hat Werkzeug Empfehlungen und Die Zukunft der Python Verpackung Abschnitte.

war distribute ein Zweig des setuptools, die im Juni 2013 Der Führer sagt remerged wurde, „Use setuptools Projekte definieren und Quelle Distributionen erstellen.“

Wie der PEP 453 und Python 3.4 empfiehlt der Guide, "Use pip zu Python-Pakete von PyPI, zu installieren" und pip mit Python 3.4 und installiert in virtualenvs von pyvenv enthalten, die ebenfalls enthalten ist. Sie könnten den PEP 453 "rationalen" Abschnitt interessant finden.

Es gibt auch neue und neueres Werkzeuge im Handbuch erwähnt, einschließlich wheel und buildout .

Ich bin froh, dass ich die beiden folgenden technischen / Halb politische Geschichten lesen.

Mit dem Martijn Faassen 2009: A History of Python Verpackung .

Und von Armin Ronacher im Juni 2013 (der Titel ist nicht ernst): Python Verpackung: Hass, Hass, Hass überall

.

Für den Anfang ist pip wirklich neu. Neue, unvollständig und weitgehend in der realen Welt un-geprüft.

Es ist äußerst viel versprechend, aber so lange, bis es kann alles tun, was / Setuptools easy_install können es nicht wahrscheinlich, in einem großen Weg fangen an, schon gar nicht in der Gesellschaft.

easy_install / Setuptools ist groß und komplex - und das ärgert viele Leute. Leider gibt es einen wirklich guten Grund für diese Komplexität, die ist, dass es für eine große Anzahl verschiedenen Anwendungsfälle bietet. Mein eigenes unterstützt einen großen (> 300) Pool von Desktop-Anwender, sowie einen ähnlich großen Raster mit einer häufig aktualisierten Anwendung. Die Vorstellung, dass wir dies tun könnten, indem sie jeden Benutzer ermöglicht, von der Quelle zu installieren, ist lächerlich -. Eier haben sich als eine zuverlässige Art und Weise mein Projekt zu verteilen

Mein Rat: Lernen Setuptools zu verwenden - es ist wirklich eine wunderbare Sache. Die meisten der Menschen, die es hassen Sie es nicht verstehen, oder einfach nicht den für als voll funktionsfähiges Verteilungssystem Anwendungsfall haben.

: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top