Ab März 2020 sind die meisten anderen Antworten auf diese Frage mehrere Jahre veraltet. Wenn Sie Ratschläge zu Python-Verpackungsproblemen erhalten, denken Sie daran, das Veröffentlichungsdatum zu überprüfen, und vertrauen Sie nicht auf veraltete Informationen.
Das Python Packaging-Benutzerhandbuch ist eine Lektüre wert. Auf jeder Seite wird ein "zuletzt aktualisiertes" Datum angezeigt, sodass Sie die Aktualität des Handbuchs überprüfen können. Es ist recht umfassend. Die Tatsache, dass es auf einer Subdomain von python.org der Python Software Foundation gehostet wird, verleiht ihm nur Glaubwürdigkeit. Die Seite Projektzusammenfassungen ist hier besonders relevant.
Zusammenfassung der Werkzeuge:
Hier ist eine Zusammenfassung der Python-Verpackungslandschaft:
Unterstützte Tools:
distutils
ist immer noch das Standardwerkzeug zum Packen in Python. Es ist in der Standardbibliothek enthalten (Python 2 und Python 3). Es ist nützlich für einfache Python-Distributionen, es fehlen jedoch Funktionen. Es wird das distutils
Python-Paket vorgestellt, das in Ihr setup.py
Skript importiert werden kann .
setuptools
wurde entwickelt, um die Einschränkungen von Distutils zu überwinden, und ist nicht in der Standardbibliothek enthalten. Es wurde ein Befehlszeilenprogramm namens aufgerufen easy_install
. Außerdem wurde das setuptools
Python-Paket eingeführt, das in Ihr setup.py
Skript importiert werden kann , und das pkg_resources
Python-Paket, das in Ihren Code importiert werden kann, um mit einer Distribution installierte Datendateien zu finden. Eines seiner Probleme ist, dass es das distutils
Python-Paket mit Affen-Patches bearbeitet . Es sollte gut funktionieren mit pip
. Es sieht regelmäßige Veröffentlichungen.
scikit-build
ist ein verbesserter Build-System-Generator, der CMake intern verwendet, um kompilierte Python-Erweiterungen zu erstellen. Da Scikit-Build nicht auf Distutils basiert, hat es keine wirklichen Einschränkungen. Wenn Ninja-Build vorhanden ist, kann Scikit-Build große Projekte dreimal schneller kompilieren als die Alternativen. Es sollte gut funktionieren mit pip
.
distlib
ist eine Bibliothek, die Funktionen bereitstellt, die von übergeordneten Tools wie verwendet werden pip
.
packaging
ist auch eine Bibliothek, die Funktionen bietet, die von übergeordneten Tools wie pip
und verwendet werdensetuptools
Veraltete / verlassene Werkzeuge:
distribute
war eine Gabelung von setuptools
. Es hat denselben Namespace verwendet. Wenn Sie also Distribute installiert haben, wird import setuptools
das mit Distribute verteilte Paket tatsächlich importiert. Distribute wurde wieder in Setuptools 0.7 zusammengeführt , sodass Sie Distribute nicht mehr verwenden müssen. Tatsächlich ist die Version auf Pypi nur eine Kompatibilitätsschicht, die Setuptools installiert.
distutils2
war ein Versuch , das Beste zu nehmen distutils
, setuptools
und distribute
und wird das Standard - Tool in Python Standard - Bibliothek enthalten. Die Idee war , dass distutils2
wäre für alte Python - Versionen verteilt werden, und dass distutils2
umbenannt werden würde packaging
für Python 3.3, die es in seiner Standardbibliothek umfassen würde. Diese Pläne verliefen jedoch nicht wie beabsichtigt und sind derzeit distutils2
ein aufgegebenes Projekt . Die neueste Version war im März 2012 und die Pypi-Homepage wurde endlich aktualisiert, um ihren Tod widerzuspiegeln.
Andere:
Wenn Sie interessiert sind, können Sie auch andere Tools lesen. Lesen Sie die Projektzusammenfassungen im Python Packaging-Benutzerhandbuch. Ich liste sie nicht alle, nicht die Seite zu wiederholen, und die Antwort auf die Frage zu halten Anpassung, die nur etwa war distribute
, distutils
, setuptools
und distutils2
.
Empfehlung:
Wenn all dies für Sie neu ist und Sie nicht wissen, wo Sie anfangen sollen, würde ich empfehlensetuptools
, zusammen mit pip
und zu lernenvirtualenv
, die alle sehr gut zusammenarbeiten.
Wenn Sie schauen , in virtualenv
, könnten Sie in dieser Frage interessieren: Was ist der Unterschied zwischen venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, etc? . (Ja, ich weiß, ich stöhne mit dir.)