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

Python Enhancement Proposals

PEP 3108 – Neuanordnung der Standardbibliothek

Autor:
Brett Cannon <brett at python.org>
Status:
Final
Typ:
Standards Track
Erstellt:
01-Jan-2007
Python-Version:
3.0
Post-History:
28-Apr-2008

Inhaltsverzeichnis

Hinweis

Die Zusammenführung von profile/cProfile ab Python 3.3 fand nicht statt und wird daher als aufgegeben betrachtet (obwohl es akzeptabel wäre, dies in Zukunft zu tun).

Zusammenfassung

Genau wie die Sprache selbst ist die Standardbibliothek (stdlib) von Python im Laufe der Jahre sehr reichhaltig geworden. Aber im Laufe der Zeit haben einige Module ihre Notwendigkeit verloren, in Python enthalten zu sein. Seit der Einführung von Python gab es auch eine Benennungsregel für Module, der nicht alle Module folgen.

Python 3.0 bietet die Gelegenheit, Module zu entfernen, die keinen langfristigen Nutzen haben. Diese Gelegenheit ermöglicht auch die Umbenennung von Modulen, damit diese dem Python Style Guide entsprechen. Dieses PEP listet Module auf, die nicht in Python 3.0 enthalten sein sollten oder umbenannt werden müssen.

Zu entfernende Module

Guido verkündete, dass „silly old stuff“ für Py3K aus der stdlib gelöscht werden soll [7]. Dies ist absichtlich offen gestaltet. Jedes zu entfernende Modul muss eine Begründung dafür haben, warum es nicht mehr mit Python vertrieben werden sollte. Dies kann von der Markierung eines Moduls als veraltet in Python 2.x bis hin zur Unterstützung einer nicht mehr weit verbreiteten Plattform reichen.

Dieser Abschnitt des PEP listet die verschiedenen zu entfernenden Module auf. Jeder Unterabschnitt stellt einen anderen Grund für die Entfernung von Modulen dar. Jedes Modul muss zusätzlich zu seiner Auflistung in einem bestimmten Unterabschnitt eine spezifische Begründung haben, um sicherzustellen, dass nur Module, die wirklich entfernt werden sollten, auch tatsächlich entfernt werden.

Wenn ein Grund angibt, wie lange es her ist, dass ein Modul „einzigartig bearbeitet“ wurde, bezieht sich dies darauf, wie lange es her ist, dass ein Check-in speziell für das Modul und nicht für eine Änderung, die universell für die gesamte stdlib galt, durchgeführt wurde. Wenn eine Bearbeitungszeit nicht als „einzigartig“ bezeichnet wird, ist dies die letzte Bearbeitung der Datei, Punkt.

Zuvor als veraltet markiert [erledigt]

PEP 4 listet alle Module auf, die in der stdlib als veraltet markiert wurden. Die angegebenen Motivationen spiegeln die in PEP 4 aufgeführten wider. Alle Module, die zum Zeitpunkt der ersten Alpha-Version von Python 3.0 in PEP aufgeführt sind, werden entfernt.

Der gesamte Inhalt von lib-old wird ebenfalls entfernt. Diese Module wurden bereits aus der Importierbarkeit entfernt, werden aber weiterhin zur Verteilung für Python für Benutzer, die auf den Code angewiesen sind, aufbewahrt.

  • cfmfile
    • Seit Python 2.4 als veraltet dokumentiert, ohne expliziten Grund.
  • cl
    • Seit Python 2.0 oder früher als veraltet dokumentiert.
    • Schnittstelle zur SGI-Hardware.
  • md5
    • Ersetzt durch das Modul hashlib.
  • mimetools
    • In einer früheren Version als veraltet dokumentiert.
    • Ersetzt durch das Paket email.
  • MimeWriter
    • Ersetzt durch das Paket email.
  • mimify
    • Ersetzt durch das Paket email.
  • multifile
    • Ersetzt durch das Paket email.
  • posixfile
    • Sperren werden besser mit fcntl.lockf() gehandhabt.
  • rfc822
    • Ersetzt durch das Paket email.
  • sha
    • Ersetzt durch das Paket hashlib.
  • sv
    • Seit Python 2.0 oder früher als veraltet dokumentiert.
    • Schnittstelle zur veralteten SGI Indigo-Hardware.
  • timing
    • Seit Python 2.0 oder früher als veraltet dokumentiert.
    • time.clock() bietet eine bessere Zeitauflösung.

Plattformspezifisch mit minimaler Nutzung [erledigt]

Python unterstützt viele Plattformen, von denen einige nicht weit verbreitet oder gepflegt werden. Und auf einigen dieser Plattformen gibt es Module, die für Benutzer auf diesen Plattformen nur begrenzt nützlich sind. Aufgrund ihrer begrenzten Nützlichkeit wäre es besser, das Python-Entwicklungsteam nicht länger mit ihrer Wartung zu belasten.

Die unten genannten Module sind dokumentiert. Alle undokumentierten Module für die angegebenen Plattformen werden ebenfalls entfernt.

IRIX

Das Betriebssystem IRIX wird nicht mehr hergestellt [13]. Die Entfernung aller Module aus dem Verzeichnis plat-irix[56] wurde aufgrund dieser Tatsache als angemessen erachtet.

  • AL/al
    • Bietet Soundunterstützung auf Indy- und Indigo-Workstations.
    • Beide Workstations sind nicht mehr erhältlich.
    • Der Code wurde seit drei Jahren nicht mehr einzigartig bearbeitet.
  • cd/CD
    • CD-Laufwerkssteuerung für SGI-Systeme.
    • SGI verkauft keine Maschinen mehr mit IRIX.
    • Der Code wurde seit 14 Jahren nicht mehr einzigartig bearbeitet.
  • cddb
    • Undokumentiert.
  • cdplayer
    • Undokumentiert.
  • cl/CL/CL_old
    • Kompressionsbibliothek für SGI-Systeme.
    • SGI verkauft keine Maschinen mehr mit IRIX.
    • Der Code wurde seit 14 Jahren nicht mehr einzigartig bearbeitet.
  • DEVICE/GL/gl/cgen/cgensuport
    • GL-Zugriff, der der Vorgänger von OpenGL ist.
    • Wurde seit mindestens acht Jahren nicht mehr bearbeitet.
    • Drittanbieterbibliotheken bieten bessere Unterstützung (PyOpenGL [10]).
  • ERRNO
    • Undokumentiert.
  • FILE
    • Undokumentiert.
  • FL/fl/flp
    • Wrapper für die FORMS-Bibliothek [14]
    • FORMS wurde seit 12 Jahren nicht mehr bearbeitet.
    • Bibliothek wird nicht häufig verwendet.
    • Die ersten acht Treffer bei Google sind für Python-Dokumente für fl.
  • fm
    • Wrapper für die IRIS Font Manager-Bibliothek.
    • Nur auf SGI-Maschinen verfügbar, die nicht mehr mit IRIX geliefert werden.
  • GET
    • Undokumentiert.
  • GLWS
    • Undokumentiert.
  • imgfile
    • Wrapper für die SGI libimage-Bibliothek für imglib-Bilddateien (.rgb-Dateien).
    • Die Python Imaging Library bietet Leseunterstützung [11].
    • Seit 13 Jahren nicht mehr einzigartig bearbeitet.
  • IN
    • Undokumentiert.
  • IOCTL
    • Undokumentiert.
  • jpeg
    • Wrapper für JPEG (De-)Kompressor.
    • Code seit neun Jahren nicht mehr einzigartig bearbeitet.
    • Drittanbieterbibliotheken bieten bessere Unterstützung (Python Imaging Library [11]).
  • panel
    • Undokumentiert.
  • panelparser
    • Undokumentiert.
  • readcd
    • Undokumentiert.
  • SV
    • Undokumentiert.
  • torgb
    • Undokumentiert.
  • WAIT
    • Undokumentiert.

Mac-spezifische Module

Die Mac-spezifischen Module sind nicht gut gepflegt (z. B. wurde das bgen-Tool, das zur automatischen Generierung vieler Module verwendet wurde, nie aktualisiert, um UCS-4 zu unterstützen). Es liegt auch nicht in der Verantwortung von Python, eine so große Menge an OS-spezifischen Modulen zu pflegen. Daher sollen alle Module unter Lib/plat-mac und Mac entfernt werden.

Ein Stubmodul für Proxy-Zugriff wird zur Verwendung durch urllib bereitgestellt.

  • _builtinSuites
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • Audio_mac
    • Undokumentiert.
  • aepack
    • OSA-Unterstützung ist besser über Drittanbieter-Module.
    • Fest kodierte Endianness, die auf Intel Macs fehlschlägt.
    • Muss möglicherweise umbenannt werden, wenn vom Carbon-Paket abhängig.
  • aetools
    • Siehe aepack.
  • aetypes
    • Siehe aepack.
  • applesingle
    • Undokumentiert.
    • AppleSingle ist ein Binärformat für A/UX.
    • A/UX wird nicht mehr vertrieben.
  • appletrawmain
    • Undokumentiert.
  • appletrunner
    • Undokumentiert.
  • argvemulator
    • Undokumentiert.
  • autoGIL
    • Sehr schlechtes Modell für die Verwendung von Python mit dem CFRunLoop.
  • bgenlocations
    • Undokumentiert.
  • buildtools
    • Seit Python 2.3 als veraltet dokumentiert, ohne expliziten Grund.
  • bundlebuilder
    • Undokumentiert.
  • Carbon
    • Die Carbon-Entwicklung wurde eingestellt.
    • Unterstützt 64-Bit-Systeme nicht vollständig.
    • Abhängig von bgen, das nie aktualisiert wurde, um UCS-4 Unicode-Builds von Python zu unterstützen.
  • CodeWarrior
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • ColorPicker
    • Es ist besser, Cocoa für GUIs zu verwenden.
  • EasyDialogs
    • Es ist besser, Cocoa für GUIs zu verwenden.
  • Explorer
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • Finder
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • findertools
    • Nicht mehr nützlich.
  • FrameWork
    • Schlecht dokumentiert.
    • Nicht aktualisiert, um Carbon Events zu unterstützen.
  • gensuitemodule
    • Siehe aepack.
  • ic
  • icglue
  • icopen
    • Auf OS X nicht notwendig.
    • Sollte ‚open‘ ersetzen, was normalerweise eine schlechte Idee ist.
  • macerrors
    • Undokumentiert.
  • MacOS
    • Würde auch die Entfernung von binhex bedeuten.
  • macostools
  • macresource
    • Undokumentiert.
  • MiniAEFrame
    • Siehe aepack.
  • Nav
    • Undokumentiert.
  • Netscape
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • OSATerminology
  • pimp
    • Undokumentiert.
  • PixMapWrapper
    • Undokumentiert.
  • StdSuites
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • SystemEvents
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • Terminal
    • Undokumentiert.
    • Paket unter lib-scriptpackages.
  • terminalcommand
    • Undokumentiert.
  • videoreader
    • Wird nicht mehr verwendet.
  • W
    • Wird nicht mehr mit Python vertrieben.

Solaris

  • SUNAUDIODEV/sunaudiodev
    • Zugriff auf die Soundkarte auf Sun-Maschinen.
    • Code seit über acht Jahren nicht mehr einzigartig bearbeitet.

Kaum genutzt [erledigt]

Einige plattformunabhängige Module werden selten verwendet. Dafür gibt es eine Reihe möglicher Erklärungen, darunter die einfache Neuimplementierung, ein sehr kleines Publikum oder mangelnde Einhaltung modernerer Standards.

  • audiodev
    • Undokumentiert.
    • Seit fünf Jahren nicht mehr bearbeitet.
  • imputil
    • Undokumentiert.
    • Nie aktualisiert, um absolute Imports zu unterstützen.
  • mutex
    • Einfach zu implementieren mit einem Semaphor und einer Warteschlange.
    • Kann nicht auf einen Sperrversuch warten.
    • Seit seiner Einführung vor 15 Jahren nicht mehr einzigartig bearbeitet.
    • Nur nützlich mit dem Modul ‚sched‘.
    • Nicht Thread-sicher.
  • stringold
    • Funktionsversionen der Methoden auf String-Objekten.
    • Veraltet seit Python 1.6.
    • Jegliche Funktionalität, die nicht im String-Objekt oder -Modul enthalten ist, wird in das String-Modul verschoben (hauptsächlich Konstanten).
  • sunaudio
    • Undokumentiert.
    • Seit über sieben Jahren nicht mehr bearbeitet.
    • Das Modul sunau bietet ähnliche Funktionen.
  • toaiff
    • Undokumentiert.
    • Erfordert die Installation der sox-Bibliothek auf dem System.
  • user
    • Einfach zu handhaben, indem der Anwendung erlaubt wird, ihren eigenen Modulnamen anzugeben, die Existenz zu prüfen und bei Fund zu importieren.
  • neu
    • Nur eine Neuzuordnung von Namen aus dem Modul ‚types‘.
    • Kann auch die integrierte Funktion type aufrufen, um die meisten Typen leicht zu erhalten.
    • Die Docstring besagt, dass das Modul seit Revision 27241 (2002-06-15) nicht mehr nützlich ist.
  • pure
    • Geschrieben, bevor Pure Atria von Rational gekauft wurde, das dann von IBM gekauft wurde (mit anderen Worten, sehr alt).
  • test.testall
    • Aus der Zeit vor regrtest.

Veraltet

Veraltet zu werden bedeutet, dass entweder ein anderes Modul in der stdlib oder eine weit verbreitete Drittanbieterbibliothek eine bessere Lösung für das Anwendungsgebiet des Moduls bietet.

  • Bastion/rexec [erledigt]
    • Eingeschränkte Ausführung / Sicherheit.
    • In Python 2.3 deaktiviert.
    • Als unsicher eingestufte Module.
  • bsddb185 [erledigt]
    • Ersetzt durch bsddb3
    • Nicht standardmäßig kompiliert.
    • Die Dokumentation besagt, dass das „Modul niemals direkt in neuem Code verwendet werden sollte“.
    • Extern verfügbar von PyPI.
  • Canvas [erledigt]
  • commands [erledigt]
    • Das subprocess-Modul ersetzt es (PEP 324).
    • Entferne getstatus(), verschiebe den Rest nach subprocess.
  • compiler [erledigt]
    • Das gleichzeitige Warten des integrierten Compilers und des stdlib-Pakets ist redundant [17].
    • Die vom Compiler erstellte AST ist verfügbar [16].
    • Es muss ein Mechanismus zum Kompilieren aus einer AST hinzugefügt werden.
  • dircache [erledigt]
    • Vernachlässigbare Nutzung.
    • Leicht zu replizieren.
  • dl [erledigt]
    • ctypes bietet bessere Unterstützung für dieselbe Funktionalität.
  • fpformat [erledigt]
    • Die gesamte Funktionalität wird durch String-Interpolation unterstützt.
  • htmllib [erledigt]
    • Ersetzt durch HTMLParser.
  • ihooks [erledigt]
    • Undokumentiert.
    • Zur Verwendung mit rexec, das seit Python 2.3 deaktiviert ist.
  • imageop [erledigt]
    • Bessere Unterstützung durch Drittanbieterbibliotheken (Python Imaging Library [11]).
    • Unit-Tests basierten auf rgbimg und imgfile.
      • rgbimg wurde in Python 2.6 entfernt.
      • imgfile ist für die Entfernung in diesem PEP vorgesehen.
  • linuxaudiodev [erledigt]
    • Ersetzt durch ossaudiodev.
  • mhlib [erledigt]
    • Sollte als einzelnes Modul entfernt werden; stattdessen mailbox verwenden.
  • popen2 [erledigt]
    • Das subprocess-Modul ersetzt es (PEP 324).
  • sgmllib [erledigt]
    • Parst SGML nicht vollständig.
    • In der stdlib zur Unterstützung von htmllib, das zur Entfernung vorgesehen ist.
  • sre [erledigt]
    • Zuvor als veraltet markiert; stattdessen re importieren.
  • stat [TODO: Alle Verwendungen auf os.stat() umstellen]
    • os.stat() gibt nun ein Tupel mit Attributen zurück.
    • Die Funktionen im Modul sollten zu Methoden für das von os.stat zurückgegebene Objekt gemacht werden.
  • statvfs [erledigt]
    • os.statvfs gibt nun ein Tupel mit Attributen zurück.
  • thread [erledigt]
    • Leute sollten stattdessen ‚threading‘ verwenden.
      • ‚thread‘ in _thread umbenennen.
      • dummy_thread als veraltet markieren und _dummy_thread umbenennen.
      • thread.get_ident nach threading verschieben.
    • Guido hat die Deprekation zuvor unterstützt [8].
  • urllib [erledigt]
    • Ersetzt durch urllib2.
    • Die ausschließlich urllib vorbehaltene Funktionalität wird im urllib-Paket beibehalten.
  • UserDict [erledigt: 3.0] [TODO: 2.6 behandeln]
    • Nicht mehr so nützlich, da Typen eine Superklasse sein können.
    • Nützliche Teile wurden in das Modul ‚collections‘ verschoben.
  • UserList/UserString [erledigt]
    • Nicht nützlich, da Typen eine Superklasse sein können.
    • In das Modul ‚collections‘ verschoben.

Wartungsaufwand

Im Laufe der Jahre sind bestimmte Module zu einer erheblichen Belastung für python-dev geworden. In solchen Fällen ist es besser, das Modul der Gemeinschaft zur Pflege zu überlassen, um python-dev zu entlasten, damit es sich stärker auf die Sprachunterstützung und andere Module in der Standardbibliothek konzentrieren kann, die nicht übermäßig viel Zeit und Mühe beanspruchen.

  • bsddb3
    • Extern gepflegt unter http://www.jcea.es/programacion/pybsddb.htm .
    • Konsistente Testinstabilität.
    • Berkeley DB folgt einem anderen Release-Zeitplan als Python, was dazu führt, dass die Bindings nicht unbedingt mit dem verfügbaren Stand synchronisiert sind.

Umzubenennende Module

Viele Module existierten in der stdlib, bevor PEP 8 in Kraft trat. Dies hat zu einigen Namensinkonsistenzen und Namespace-Blähungen geführt, die behoben werden sollten.

PEP 8-Verstöße [erledigt]

PEP 8 schreibt vor, dass Module „kurze, durchgehend kleingeschriebene Namen haben sollten“, bei denen „Unterstriche verwendet werden können ..., wenn dies die Lesbarkeit verbessert“. Die Verwendung von Unterstrichen wird in Paketnamen nicht empfohlen. Die folgenden Module verstoßen gegen PEP 8 und werden nicht auf andere Weise umbenannt, indem sie in ein Paket verschoben werden.

Aktueller Name Ersatzname
_winreg winreg
ConfigParser configparser
copy_reg copyreg
Queue queue
SocketServer socketserver

Zusammenführen von C- und Python-Implementierungen derselben Schnittstelle

Mehrere Schnittstellen haben sowohl eine Python- als auch eine C-Implementierung. Während es großartig ist, eine C-Implementierung für Geschwindigkeit mit einer Python-Implementierung als Fallback zu haben, gibt es keinen Grund, die beiden Implementierungen unabhängig voneinander in der stdlib offenzulegen. Für Python 3.0 werden alle Schnittstellen mit zwei Implementierungen zu einer einzigen öffentlichen Schnittstelle zusammengeführt.

Das C-Modul erhält einen führenden Unterstrich, um zu kennzeichnen, dass es nicht die Referenzimplementierung ist (die Python-Implementierung ist dies). Das bedeutet, dass alle semantischen Unterschiede zwischen der C- und der Python-Version vor Python 3.0 behandelt werden müssen, oder die C-Implementierung wird entfernt, bis sie behoben ist.

Eine Schnittstelle, die unten nicht aufgeführt ist, ist xml.etree.ElementTree. Dies ist ein extern gepflegtes Modul und liegt daher nicht in der direkten Kontrolle des Python-Entwicklungsteams für die Umbenennung. Siehe Offene Fragen für eine Diskussion darüber.

  • pickle/cPickle [erledigt]
    • cPickle in _pickle umbenennen.
    • Semantische Vollständigkeit der C-Implementierung *nicht* verifiziert.
  • profile/cProfile [TODO]
    • cProfile in _profile umbenennen.
    • Semantische Vollständigkeit der C-Implementierung *nicht* verifiziert.
  • StringIO/cStringIO [erledigt]
    • Die Klasse zum Modul ‚io‘ hinzufügen.

Keine öffentliche, dokumentierte Schnittstelle [erledigt]

Es gibt mehrere Module in der stdlib, die keine definierte öffentliche Schnittstelle haben. Diese Module existieren als Support-Code für andere Module, die offengelegt werden. Da sie nicht direkt verwendet werden sollen, sollten sie umbenannt werden, um dies widerzuspiegeln.

Aktueller Name Ersatzname
markupbase _markupbase

Schlecht gewählte Namen [erledigt]

Einige Module haben Namen, die im Nachhinein schlecht gewählt wurden. Sie sollten umbenannt werden, um zu verhindern, dass ihr schlechter Name über die 2.x-Serie hinaus Bestand hat.

Aktueller Name Ersatzname
repr reprlib
test.test_support test.support

Gruppierung von Modulen [erledigt]

Mit dem Wachstum der stdlib haben sich mehrere Bereiche erweitert und mehrere Module aufgenommen (z. B. Unterstützung für Datenbankdateien). Es ist daher sinnvoll, zusammengehörige Module in Pakete zu gruppieren.

dbm-Paket

Aktueller Name Ersatzname
anydbm dbm.__init__ [1]
dbhash dbm.bsd
dbm dbm.ndbm
dumbdm dbm.dumb
gdbm dbm.gnu
whichdb dbm.__init__ [1]

html-Paket

Aktueller Name Ersatzname
HTMLParser html.parser
htmlentitydefs html.entities

http-Paket

Aktueller Name Ersatzname
httplib http.client
BaseHTTPServer http.server [2]
CGIHTTPServer http.server [2]
SimpleHTTPServer http.server [2]
Cookie http.cookies
cookielib http.cookiejar

tkinter-Paket

Aktueller Name Ersatzname
Dialog tkinter.dialog
FileDialog tkinter.filedialog [4]
FixTk tkinter._fix
ScrolledText tkinter.scrolledtext
SimpleDialog tkinter.simpledialog [5]
Tix tkinter.tix
Tkconstants tkinter.constants
Tkdnd tkinter.dnd
Tkinter tkinter.__init__
tkColorChooser tkinter.colorchooser
tkCommonDialog tkinter.commondialog
tkFileDialog tkinter.filedialog [4]
tkFont tkinter.font
tkMessageBox tkinter.messagebox
tkSimpleDialog tkinter.simpledialog [5]
turtle tkinter.turtle

urllib-Paket

Ursprünglich sollte dieses neue Paket url heißen, aber aufgrund der häufigen Verwendung des Namens als Variable wurde beschlossen, den Namen urllib beizubehalten und stattdessen bestehende Module in ein neues Paket zu verschieben.

Aktueller Name Ersatzname
urllib2 urllib.request, urllib.error
urlparse urllib.parse
urllib urllib.parse, urllib.request, urllib.error [6]
robotparser urllib.robotparser

xmlrpc-Paket

Aktueller Name Ersatzname
xmlrpclib xmlrpc.client
DocXMLRPCServer xmlrpc.server [3]
SimpleXMLRPCServer xmlrpc.server [3]

Migrationsplan

Probleme

Themen im Zusammenhang mit diesem PEP

Für zu entfernende Module

Für die Modulentfernungen ist es am einfachsten, das Modul zuerst in Python 3.0 zu entfernen, um zu sehen, wo Abhängigkeiten bestehen. Dies erleichtert das Auffinden von Code, der (möglicherweise) die Unterdrückung der DeprecationWarning erfordert.

In Python 3.0

  1. Das Modul entfernen.
  2. Zugehörige Tests entfernen.
  3. Alle Dokumentationen entfernen (typischerweise die Dokumentationsdatei des Moduls und ihr Eintrag in einer Datei für die Bibliotheksreferenz).
  4. Bearbeiten Sie Modules/Setup.dist und setup.py, falls erforderlich.
  5. Führen Sie die Regressionstestsuite aus (mit -uall); achten Sie auf Tests, die übersprungen werden, weil ein Import für das entfernte Modul fehlgeschlagen ist.
  6. Den Änderungsbeitrag einchecken (mit einem entsprechenden Misc/NEWS-Eintrag).
  7. Dieses PEP aktualisieren und vermerken, dass der 3.0-Schritt abgeschlossen ist.

In Python 2.6

  1. Fügen Sie den folgenden Code in das veraltete Modul ein, wenn es in Python implementiert ist, als erster ausgeführter Code (passen Sie den Modulnamen und den warnings-Import und was sonst noch benötigt wird)
    from warnings import warnpy3k
    warnpy3k("the XXX module has been removed in Python 3.0",
             stacklevel=2)
    del warnpy3k
    

    oder den folgenden Code, wenn es sich um ein Erweiterungsmodul handelt

    if (PyErr_WarnPy3k("the XXX module has been removed in "
                       "Python 3.0", 2) < 0)
        return;
    

    (Das Python-Dev TextMate Bundle, erhältlich unter Misc/TextMate, enthält einen Befehl, der all dies für Sie generiert).

  2. Aktualisieren Sie die Dokumentation. Für Module mit eigener Dokumentationsdatei verwenden Sie die Option :deprecated: mit der Direktive module zusammen mit der Direktive deprecated und geben Sie an, dass die Deprekation in 2.6 erfolgt, aber für die Entfernung des Moduls in 3.0 bestimmt ist.
    .. deprecated:: 2.6
       The :mod:`XXX` module has been removed in Python 3.0.
    

    Für Module, die einfach in einer Datei aufgeführt sind (z. B. undoc.rst), verwenden Sie die warning-Direktive.

  3. Fügen Sie das Modul dem Modulentfernungs-Test in test_py3kwarn hinzu.
  4. Unterdrücken Sie die Warnung im Testcode des Moduls mit
    test.test_support.import_module(name, deprecated=True).
  5. Überprüfen Sie den Änderungsbeitrag mit einem entsprechenden Misc/NEWS-Eintrag (blockieren Sie diesen Check-in in py3k!).
  6. Aktualisieren Sie dieses PEP und vermerken Sie, dass der 2.6-Schritt abgeschlossen ist.

Umbenennung von Modulen

Die Unterstützung im 2to3-Refactoring-Tool für Umbenennungen wird verwendet, um Benutzern den Übergang zu neuen Modulnamen zu erleichtern [9]. Import-Anweisungen werden neu geschrieben, so dass nur die Import-Anweisung und kein anderer Teil des Codes berührt werden muss. Dies wird durch die Verwendung des Schlüsselworts as in Import-Anweisungen erreicht, um im Modul-Namespace unter dem alten Namen zu binden, während basierend auf dem neuen Namen importiert wird (wenn das Schlüsselwort nicht bereits verwendet wird, dann wird der neu zugewiesene Name unverändert gelassen und nur das importierte Modul muss geändert werden). Der Fixer fix_imports ist ein Beispiel für die Vorgehensweise.

Python 3.0

  1. Aktualisieren Sie 2to3 im Sandbox, um die Umbenennung zu unterstützen.
  2. Verwenden Sie svn move, um das Modul umzubenennen.
  3. Aktualisieren Sie alle Import-Anweisungen in der stdlib, um den neuen Namen zu verwenden (verwenden Sie den fix_imports-Fixer von 2to3 für die einfachste Lösung).
  4. Benennen Sie das Modul in seiner eigenen Dokumentation um.
  5. Aktualisieren Sie alle Verweise in der Dokumentation vom alten zum neuen Namen.
  6. Führen Sie regrtest.py -uall aus, um zu überprüfen, ob die Umbenennung erfolgreich war.
  7. Fügen Sie einen Eintrag in Misc/NEWS hinzu.
  8. Commit der Änderungen.

Python 2.6

  1. Fügen Sie in der Dokumentation des Moduls eine Notiz hinzu, die besagt, dass das Modul in Python 3.0 umbenannt wird.
    .. note::
       The :mod:`OLDNAME` module has been renamed to :mod:`NEWNAME` in
       Python 3.0.
    
  2. Commit der Dokumentationsänderung.
  3. Blockieren Sie die Revision in py3k.

Offene Fragen

Umbenennung von Modulen, die außerhalb der Standardbibliothek gepflegt werden

xml.etree.ElementTree erfüllt nicht nur die PEP 8-Namensstandards, sondern hat auch eine offengelegte C-Implementierung. Es ist ein extern gepflegtes Paket, obwohl PEP 360. Es wird eine Anfrage an den Maintainer gestellt, den Namen zu ändern, damit er PEP 8 entspricht und die C-Implementierung verbirgt.

Abgelehnte Ideen

Module, die ursprünglich zur Entfernung vorgeschlagen wurden

  • asynchat/asyncore
    • Josiah Carlson hat erklärt, dass er die Module pflegen wird.
  • audioop/sunau/aifc
    • Audio-Module, bei denen die Formate noch verwendet werden.
  • base64/quopri/uu
    • Alle immer noch weit verbreitet.
    • Das Modul ‚codecs‘ bietet keine so schöne API für grundlegende Nutzung.
  • fileinput
    • Nützlich, wenn man mit stdin arbeiten muss.
  • linecache
    • Wird intern an mehreren Stellen verwendet.
  • nis
    • Zeugenaussagen von Personen, dass NIS-Neuinstallationen immer noch stattfinden
  • getopt
    • Einfacher als optparse.
  • repr
    • Nützlich als Grundlage für Überschreibungen.
    • Intern verwendet.
  • sched
    • Nützlich für Simulationen.
  • symtable/_symtable
    • Docs wurden geschrieben.
  • telnetlib
    • Sehr praktisch für schnelle und schmutzige Fernzugriffe.
    • Einige Hardware unterstützt die Verwendung von Telnet für Konfiguration und Abfragen.
  • Tkinter
    • Würde die Existenz von IDLE verhindern.
    • Kein GUI-Toolkit wäre out-of-the-box verfügbar.

Einführung eines neuen Top-Level-Pakets

Es wurde vorgeschlagen, die gesamte stdlib in ein eigenes Paket zu legen. Dieses PEP wird sich nicht mit dieser Frage befassen, da es eigene Designprobleme hat (Benennung, verdient es besondere Berücksichtigung in Import-Semantik usw.). Alles in diesem PEP kann leicht gehandhabt werden, wenn ein neues Top-Level-Paket eingeführt wird.

Referenzen


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

Zuletzt geändert: 2025-01-30 01:20:11 GMT