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:
distutilsist 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 distutilsPython-Paket vorgestellt, das in Ihr setup.pySkript importiert werden kann .
setuptoolswurde 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 setuptoolsPython-Paket eingeführt, das in Ihr setup.pySkript importiert werden kann , und das pkg_resourcesPython-Paket, das in Ihren Code importiert werden kann, um mit einer Distribution installierte Datendateien zu finden. Eines seiner Probleme ist, dass es das distutilsPython-Paket mit Affen-Patches bearbeitet . Es sollte gut funktionieren mit pip. Es sieht regelmäßige Veröffentlichungen.
scikit-buildist 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.
distlibist eine Bibliothek, die Funktionen bereitstellt, die von übergeordneten Tools wie verwendet werden pip.
packagingist auch eine Bibliothek, die Funktionen bietet, die von übergeordneten Tools wie pipund verwendet werdensetuptools
Veraltete / verlassene Werkzeuge:
distributewar eine Gabelung von setuptools. Es hat denselben Namespace verwendet. Wenn Sie also Distribute installiert haben, wird import setuptoolsdas 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.
distutils2war ein Versuch , das Beste zu nehmen distutils, setuptoolsund distributeund wird das Standard - Tool in Python Standard - Bibliothek enthalten. Die Idee war , dass distutils2wäre für alte Python - Versionen verteilt werden, und dass distutils2umbenannt werden würde packagingfür Python 3.3, die es in seiner Standardbibliothek umfassen würde. Diese Pläne verliefen jedoch nicht wie beabsichtigt und sind derzeit distutils2ein 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, setuptoolsund distutils2.
Empfehlung:
Wenn all dies für Sie neu ist und Sie nicht wissen, wo Sie anfangen sollen, würde ich empfehlensetuptools , zusammen mit pipund 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.)