PEP 229 – Using Distutils to Build Python
- Autor:
- A.M. Kuchling <amk at amk.ca>
- Status:
- Final
- Typ:
- Standards Track
- Erstellt:
- 16. Nov. 2000
- Python-Version:
- 2.1
- Post-History:
Inhaltsverzeichnis
Einleitung
Der Mechanismus Modules/Setup hat einige Mängel
- Leute müssen daran denken, Teile von
Modules/Setupauszukommentieren, um alle möglichen Module zu erhalten. - Das Verschieben von
Setupin eine neue Version von Python ist mühsam; neue Module wurden hinzugefügt, so dass man nicht einfach die ältere Version kopieren kann, sondern die beiden Versionen abgleichen muss. - Benutzer müssen herausfinden, wo die benötigten Bibliotheken, wie z.B.
zlib, installiert sind.
Vorschlag
Verwenden Sie Distutils, um die mit Python gelieferten Module zu erstellen.
Die Änderungen können in mehrere Teile unterteilt werden
- Distutils benötigt einige Python-Module, um Module erstellen zu können. Derzeit glaube ich, dass die minimale Liste
posix,_sreundstringist.Diese Module müssen erstellt werden, bevor Distutils verwendet werden kann. Sie werden daher einfach fest in
Modules/Makefileverdrahtet und automatisch erstellt. - Ein übergeordnetes setup.py-Skript wird geschrieben, das die auf dem System installierten Bibliotheken prüft und so viele Module wie möglich kompiliert.
Modules/Setupwird beibehalten und Einstellungen darin überschreiben das übliche Verhalten vonsetup.py, sodass Sie ein als fehlerhaft bekanntes Modul deaktivieren oder spezifische Kompilierungs- oder Linker-Flags angeben können. Im gängigen Fall, in demsetup.pykorrekt funktioniert, bleibt jedoch alles inSetupauskommentiert. Die anderenSetup.*werden überflüssig, da nichtsSetupautomatisch generieren wird.
Der Patch wurde für Python 2.1 eingecheckt und anschließend modifiziert.
Implementierung
Patch #102588 auf SourceForge enthält den vorgeschlagenen Patch. Derzeit versucht der Patch, konservativ zu sein und so wenige Dateien wie möglich zu ändern, um das Zurückrollen des Patches zu vereinfachen. Zum Beispiel wird kein Versuch unternommen, die vorhandenen Build-Mechanismen zu entfernen. Solche Vereinfachungen können bis später im Beta-Zyklus warten, wenn wir sicher sind, dass der Patch beibehalten wird, oder sie können bis Python 2.2 warten.
Der Patch nimmt folgende Änderungen vor
- Nimmt einige notwendige Änderungen an distutils/sysconfig vor (diese werden separat eingecheckt)
- Im übergeordneten
Makefile.inführt das Ziel "sharedmods" einfach"./python setup.py build"aus, und "sharedinstall" führt"./python setup.py install"aus. Das Ziel "clobber" löscht auch das Unterverzeichnisbuild/, in dem Distutils seine Ausgabe platziert. Modules/Setup.config.inenthält nur Einträge für die Modulegcundthread; die Modulereadline,cursesunddbwerden entfernt, da es nun die Aufgabe vonsetup.pyist, sie zu handhaben.Modules/Setup.distenthält nun Einträge für nur 3 Module –_sre,posixundstrop.- Das
configure-Skript erstelltsetup.cfgaussetup.cfg.in. Dies ist aus zwei Gründen erforderlich: um das Kompilieren in Unterverzeichnissen zu ermöglichen und um das konfigurierte Installationspräfix zu erhalten. - Fügt
setup.pyzum Stammverzeichnis des Quellbaums hinzu.setup.pyist das größte Stück des Puzzles, wenn auch nicht das komplizierteste.setup.pyenthält eine Unterklasse der KlasseBuildExtund erweitert sie um eine Methodedetect_modules(), die die Arbeit leistet, herauszufinden, wann Module kompiliert werden können, und sie zur Liste 'exts' hinzuzufügen.
Ungelöste Probleme
Müssen wir es ermöglichen, die 3 fest verdrahteten Module zu deaktivieren, ohne die Makefiles manuell zu bearbeiten? [Antwort: Nein.]
Distutils kompiliert Module immer als dynamische Bibliotheken. Wie unterstützen wir das Kompilieren als statische Bibliotheken in das resultierende Python-Binärprogramm?
[Antwort: Das Erstellen eines Python-Binärprogramms mit Distutils sollte machbar sein, obwohl es noch niemand implementiert hat. Dies sollte irgendwann geschehen, ist aber keine dringende Priorität, da das Herumspielen mit dem übergeordneten Makefile.pre.in ausreichend ist.]
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0229.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT