Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 365 – Hinzufügen des Moduls pkg_resources

Autor:
Phillip J. Eby <pje at telecommunity.com>
Status:
Abgelehnt
Typ:
Standards Track
Thema:
Packaging
Erstellt:
30. Apr. 2007
Post-History:
30. Apr. 2007

Inhaltsverzeichnis

Zusammenfassung

Diese PEP schlägt vor, eine erweiterte Version des Moduls pkg_resources in die Standardbibliothek aufzunehmen.

pkg_resources ist ein Modul, das verwendet wird, um Python-Paket-/Versionsabhängigkeiten zu finden und zu verwalten sowie gebündelte Dateien und Ressourcen abzurufen, einschließlich solcher innerhalb von gezippten .egg-Dateien. Derzeit ist pkg_resources nur durch die Installation der gesamten setuptools-Distribution verfügbar, aber es hängt von keinem anderen Teil von setuptools ab; tatsächlich umfasst es die gesamte Laufzeit-Support-Bibliothek für Python Eggs und ist eigenständig nützlich.

Darüber hinaus könnte dieses Modul mit einer zusätzlichen Funktion die einfache Bootstrap-Installation mehrerer Python-Paketmanagement-Tools unterstützen, einschließlich setuptools, workingenv und zc.buildout.

Vorschlag

Anstatt vorzuschlagen, setuptools in die Standardbibliothek aufzunehmen, schlägt diese PEP nur vor, pkg_resources für Python 2.6 und 3.0 in die Standardbibliothek aufzunehmen. pkg_resources ist erheblich stabiler als der Rest von setuptools, wobei in den letzten 12 Monaten praktisch keine neuen Funktionen hinzugefügt wurden.

Diese PEP schlägt jedoch auch vor, dass eine neue Funktion zu pkg_resources hinzugefügt wird, bevor sie in die Standardbibliothek aufgenommen wird. Insbesondere sollte es möglich sein, Folgendes zu tun:

python -m pkg_resources SomePackage==1.2

um das Herunterladen und Installieren von SomePackage von PyPI anzufordern. Diese Funktion wäre *kein* Ersatz für easy_install; stattdessen würde sie sich darauf verlassen, dass SomePackage reine Python .egg-Dateien enthält, die über die PyPI XML-RPC-API zum Download angeboten werden, und die Eggs würden im Verzeichnis $PYTHON_EGG_CACHE platziert werden, von wo aus sie standardmäßig **nicht** importierbar wären. (Und es würden keine Skripte installiert.) Wenn das heruntergeladene Egg jedoch Installations-Bootstrap-Code enthält, wird ihm die Möglichkeit gegeben, ausgeführt zu werden.

Diese Einschränkungen würden es ermöglichen, den Code extrem einfach zu halten und dennoch leistungsfähig genug, um Benutzer zu unterstützen, die Paketmanagement-Tools wie setuptools, workingenv und zc.buildout herunterladen, indem einfach der Name des Tools auf der Kommandozeile angegeben wird.

Begründung

Viele Benutzer haben gefordert, dass setuptools in die Standardbibliothek aufgenommen wird, um zu vermeiden, dass Benutzer den umständlichen Prozess des Bootstrappings durchlaufen müssen. Die meiste Bootstrap-Komplexität entsteht jedoch dadurch, dass von Setuptools installierter Code das pkg_resources-Laufzeitmodul nicht verwenden kann, es sei denn, setuptools ist bereits installiert. Somit erfordert die Installation von setuptools (in gewissem Sinne), dass setuptools bereits installiert ist.

Andere Python-Paketmanagement-Tools wie workingenv und zc.buildout haben ähnliche Bootstrap-Probleme, da beide setuptools verwenden, aber auch den Benutzern etwas bieten wollen, das einer "Ein-Schritt-Installation" nahekommt. Die Komplexität der Erstellung von Bootstrap-Dienstprogrammen für diese und andere zukünftige Tools wird erheblich reduziert, wenn pkg_resources bereits vorhanden ist und auch vorverpackte Eggs von PyPI herunterladen kann.

(Dies würde auch bedeuten, dass setuptools nicht installiert werden müsste, um einfach nur Eggs *zu verwenden*, im Gegensatz zu ihrer Erstellung.)

Schließlich ist neben dem Zugriff auf von setuptools oder anderen Paketierungstools erstellte Eggs zu beachten, dass seit Python 2.5 das distutils-Installationspaket Metadaten (auch bekannt als PKG-INFO)-Dateien installiert, die von pkg_resources gelesen werden können, um zu identifizieren, welche Distributionen sich bereits auf sys.path befinden. In Umgebungen, in denen Python-Pakete mit Systempaket-Tools (wie RPM) installiert werden, bietet das Modul pkg_resources eine API zur Erkennung, welche Versionen welcher Pakete installiert sind, auch wenn diese Pakete über distutils anstelle von setuptools installiert wurden.

Implementierung und Dokumentation

Die pkg_resources-Implementierung wird im Python SVN-Repository unter /sandbox/trunk/setuptools/ gepflegt; siehe pkg_resources.py und pkg_resources.txt. Dokumentation für die von pkg_resources unterstützten Egg-Formate kann in doc/formats.txt gefunden werden. HTML-Versionen dieser Dokumente sind verfügbar unter

(Diese HTML-Versionen sind für setuptools 0.6; sie spiegeln möglicherweise nicht alle Änderungen wider, die in den .txt-Versionen des Subversion-Trunks zu finden sind.)


Quelle: https://github.com/python/peps/blob/main/peps/pep-0365.rst

Zuletzt geändert: 2025-02-01 08:59:27 GMT