Hinweis: Obwohl JavaScript für diese Website nicht unbedingt erforderlich ist, werden Ihre Interaktionsmöglichkeiten mit den Inhalten eingeschränkt sein. Bitte aktivieren Sie JavaScript für das volle Erlebnis.

Python 1.6.1

Python 1.6.1

Hinweis: Sehen Sie auf den Download-Seiten nach neueren Versionen.

Was ist neu?

Python 1.6 war die letzte der bei CNRI entwickelten Versionen und die einzige von CNRI veröffentlichte Version mit einer Open-Source-Lizenz. Nach der Veröffentlichung von Python 1.6 und nachdem Guido van Rossum CNRI verlassen hatte, um mit kommerziellen Softwareentwicklern zusammenzuarbeiten, wurde klar, dass die Möglichkeit, Python mit Software unter der GNU General Public License (GPL) zu verwenden, sehr wünschenswert war. CNRI und die Free Software Foundation (FSF) arbeiteten zusammen, um eine Lizenzänderung zu entwickeln, die dies ermöglicht. Python 1.6.1 ist im Wesentlichen dasselbe wie Python 1.6, mit einigen kleineren Fehlerbehebungen und einer GPL-kompatiblen Lizenz.

Hinweis: Laut CNRI ist Python 1.6.1 GPL-kompatibel, aber der Anwalt der FSF hat erklärt, dass Python 1.6.1 nicht mit der GPL kompatibel ist. CNRI widerspricht und erklärt, der Anwalt der FSF habe dem Anwalt von CNRI mitgeteilt, dass 1.6.1 "nicht inkompatibel" mit der GPL sei.

Download

Python 1.6.1 ist jetzt zum Download verfügbar. Es wird unter der CNRI Open Source GPL-kompatiblen Lizenz veröffentlicht.

Hinweise für Windows-Benutzer: Einige Browser entfernen die ".exe"-Erweiterung der heruntergeladenen Installer-Datei. Wenn Ihnen das passiert, benennen Sie die heruntergeladene Datei einfach in "python16.exe" um, bevor Sie sie doppelklicken, um den Installer auszuführen. Wenn Sie jemals eine ältere Python-Version installiert haben (insbesondere Distributionen von PythonWare), müssen Sie möglicherweise Verweise darauf aus Ihrer autoexec.bat entfernen. Warnung vor Inkompatibilität: Norton Antivirus 2000 kann bei Windows 98 zu Abstürzen mit blauer Bildschirmmeldung führen, wenn eine Funktion der os.popen*()-Familie aufgerufen wird. Um dieses Problem zu vermeiden, deaktivieren Sie Norton Antivirus bei der Verwendung von Python. (Bestätigt auf Windows 98 Second Edition mit Norton Antivirus Version 6.10.20. Dieselbe Norton Antivirus-Version hat dieses Problem unter Windows 2000 nicht. Norton Antivirus Version 5 unter Windows 98SE hat dieses Problem ebenfalls nicht.)

Fehler und Patches

Um einen Fehler zu melden, verwenden Sie immer den Bug Tracker von SourceForge. Wenn Sie einen Patch haben, verwenden Sie bitte den Patch Manager von SourceForge. Stellen Sie sicher, dass Sie angeben, dass es sich um eine Fehlermeldung oder einen Patch für Python 1.6.1 handelt!

Was ist neu in Version 1.6.1?

  • Eine neue Lizenz (siehe oben).
  • Ein Core-Dump in der C-API-Funktion PyList_Reverse() wurde behoben.
  • Die 1.6-Version enthielt versehentlich eine Reihe von .pyc-Dateien; diese wurden entfernt.

Was ist neu in Version 1.6?

Hier ist eine Liste aller relevanten Änderungen seit Version 1.5.2.

Quellcode-Inkompatibilitäten

Mehrere kleine inkompatible Bibliotheksänderungen könnten Sie aus dem Konzept bringen

  • Die append()-Methode für Listen kann nicht mehr mit mehr als einem Argument aufgerufen werden. Dies hat früher ein einzelnes Tupel aus allen Argumenten angehängt, war aber undokumentiert. Um ein Tupel anzuhängen, verwenden Sie z. B. l.append((a, b, c)).
  • Die Methoden connect(), connect_ex() und bind() für Sockets erfordern genau ein Argument. Zuvor konnten Sie s.connect(host, port) aufrufen, aber das war undokumentiert. Sie müssen jetzt s.connect((host, port)) schreiben.
  • Die Funktionen str() und repr() unterscheiden sich nun häufiger. Bei langen Ganzzahlen hängt str() nicht mehr ein 'L' an. Daher ist str(1L) == '1', was früher '1L' war; repr(1L) bleibt unverändert und gibt weiterhin '1L' zurück. Bei Gleitkommazahlen gibt repr() nun 17 Stellen Präzision an, um sicherzustellen, dass keine Präzision verloren geht (bei aktueller Hardware).
  • Die -X-Option ist weggefallen. Eingebaute Ausnahmen sind jetzt immer Klassen. Viele weitere Bibliotheksmodule wurden ebenfalls in klassenbasierte Ausnahmen umgewandelt.

Binäre Inkompatibilitäten

Erweiterungen von Drittanbietern, die für Python 1.5.x erstellt wurden, können nicht mit Python 1.6 verwendet werden; diese Erweiterungen müssen für Python 1.6 neu erstellt werden.

Unter Windows führt der Versuch, eine für Python 1.5.x erstellte Erweiterung eines Drittanbieters zu importieren, zu einem sofortigen Absturz; da können wir nicht viel tun. Überprüfen Sie Ihre PYTHONPATH-Umgebungsvariable!

Übersicht der Änderungen seit 1.5.2

Für diese Übersicht habe ich aus dem Dokument "What's New in Python 2.0" von Andrew Kuchling und Moshe Zadka entlehnt: http://starship.python.net/crew/amk/python/writing/new-python/.

Es gibt viele neue Module und viele Fehler wurden behoben. Eine Liste aller neuen Module ist unten enthalten.

Wahrscheinlich die durchdringendste Änderung ist die Hinzufügung von Unicode-Unterstützung. Wir haben einen neuen grundlegenden Datentyp hinzugefügt, den Unicode-String, eine neue eingebaute Funktion unicode() und zahlreiche C-APIs zur Behandlung von Unicode und Kodierungen. Weitere Details finden Sie in der Datei Misc/unicode.txt oder unter http://starship.python.net/crew/lemburg/unicode-proposal.txt.

Zwei weitere wichtige Änderungen, die mit der Unicode-Unterstützung zusammenhängen, sind die Hinzufügung von String-Methoden und eine neue Regex-Engine.

  • String-Methoden bedeuten, dass Sie jetzt s.lower() usw. sagen können, anstatt das String-Modul zu importieren und string.lower(s) usw. zu sagen. Eine Besonderheit ist, dass das Äquivalent zu string.join(sequence, delimiter) delimiter.join(sequence) ist. Verwenden Sie " ".join(sequence) für die Wirkung von string.join(sequence); um dies lesbarer zu machen, versuchen Sie zuerst space=" ". Beachten Sie, dass die Standardwerte für das maxsplit-Argument in split() und replace() von 0 auf -1 geändert wurden.
  • Die neue Regex-Engine, SRE von Fredrik Lundh, ist vollständig abwärtskompatibel mit der alten Engine und wird tatsächlich über dieselbe Schnittstelle (das "re"-Modul) aufgerufen. Sie können die alte Engine explizit durch Import von pre oder die SRE-Engine durch Import von sre aufrufen. SRE ist schneller als pre und unterstützt Unicode (was der Hauptgrund war, Anstrengungen in eine weitere neue Regex-Engine zu stecken – dies ist mindestens die vierte!).

Weitere Änderungen

Weitere Änderungen, die den Code nicht brechen, aber gut zu wissen sind

Das Löschen von Objekten ist jetzt sicher, selbst bei tief verschachtelten Datenstrukturen.

Long/int-Vereinheitlichungen: Lange Ganzzahlen können in seek()-Aufrufen als Slice-Indizes verwendet werden.

Die String-Formatierung (s % args) hat eine neue Formatierungsoption, '%r', die wie '%s' funktioniert, aber repr(arg) anstelle von str(arg) einfügt. (Noch nicht in Alpha 1.)

Greg Wards "distutils"-Paket ist enthalten: Dies vereinfacht die Installation, Erstellung und Verteilung von Paketen von Drittanbietern erheblich.

Es gibt jetzt spezielle Syntax, die Sie anstelle der apply()-Funktion verwenden können. f(*args, **kwds) ist äquivalent zu apply(f, args, kwds). Sie können auch Variationen f(a1, a2, *args, **kwds) verwenden, und Sie können eine oder die andere weglassen: f(*args), f(**kwds).

Die eingebauten Funktionen int() und long() nehmen ein optionales zweites Argument zur Angabe der Konvertierungsbasis – natürlich nur, wenn das erste Argument ein String ist. Dies macht string.atoi() und string.atol() obsolet. (string.atof() war bereits obsolet).

Wenn eine lokale Variable dem Compiler bekannt ist, aber bei Verwendung undefiniert ist, wird eine neue Ausnahme UnboundLocalError ausgelöst. Dies ist eine Klasse, die von NameError abgeleitet ist, sodass Code, der NameError abfängt, weiterhin funktioniert. Der Zweck ist, bessere Diagnose in folgendem Beispiel zu ermöglichen

x = 1
def f():
    print x
    x = x+1

Dies löste früher einen NameError bei der print-Anweisung aus, was selbst erfahrene Python-Programmierer verwirrte (besonders wenn zwischen der Referenz und der Zuweisung an x :-). Hunderte von Codezeilen liegen).

Sie können jetzt den 'in'-Operator überschreiben, indem Sie eine __contains__-Methode definieren. Beachten Sie, dass die Argumente vertauscht sind: x in a ruft a.__contains__(x) auf. Deshalb heißt die Methode nicht __in__.

Die Ausnahme AttributeError hat eine benutzerfreundlichere Fehlermeldung, z. B.'Spam' Instanz hat keine Attribut 'eggs'. Dies kann Code brechen, der erwartet, dass die Nachricht exakt der Attributname ist.

Vladimir Marangozov hat rationalere C-APIs für die Speicherzuweisung entworfen. Siehe mymalloc.h.

Neue Module in 1.6

UserString – Basisklasse zum Ableiten vom String-Typ.

distutils – Werkzeuge zur Verteilung von Python-Modulen.

robotparser – Parst eine robots.txt-Datei zum Schreiben von Web-Crawlern. (Verschoben von Tools/webchecker/.)

linuxaudiodev – Audio für Linux.

mmap – behandelt eine Datei als Speicherpuffer. (Windows und Unix.)

sre – reguläre Ausdrücke (schnell, unterstützt Unicode). Derzeit ist dieser Code sehr roh. Schließlich wird das re-Modul mit sre neu implementiert (ohne Änderungen an der re-API).

filecmp – ersetzt die alten Module cmp.py und dircmp.py.

tabnanny – prüft Python-Quellen auf Tabulatorbreitenabhängigkeit. (Verschoben von Tools/scripts/.)

urllib2 – neue und verbesserte, aber inkompatible Version von urllib (noch experimentell).

zipfile – liest und schreibt Zip-Archive.

codecs – Unterstützung für Unicode-Encoder/Decoder.

unicodedata – bietet Zugriff auf die Unicode 3.0-Datenbank.

_winreg – Zugriff auf die Windows-Registrierung.

encodings – Paket, das eine große Auswahl an Standard-Codecs bereitstellt – derzeit nur für die neue Unicode-Unterstützung. Es verfügt über einen Drop-in-Erweiterungsmechanismus, der es Ihnen ermöglicht, neue Codecs hinzuzufügen, indem Sie sie einfach in das Verzeichnis des encodings-Pakets kopieren. Die Unterstützung für asiatische Codecs wird wahrscheinlich als separates Distributionspaket, das auf dieser Technik und dem neuen distutils-Paket aufbaut, verfügbar gemacht.

Geänderte Module

readline, ConfigParser, cgi, calendar, posix, readline, xmllib, aifc, chunk, wave, random, shelve, nntplib – kleinere Verbesserungen.

socket, httplib, urllib – optionale OpenSSL-Unterstützung (nur Unix).

_tkinter – Unterstützung für 8.0 bis 8.3. Unterstützung für Versionen älter als 8.0 wurde eingestellt.

string – die meisten Teile dieses Moduls sind jetzt veraltet, da Strings Methoden haben. Dieses Modul verwendet nicht mehr das eingebaute strop-Modul, sondern nutzt die neuen String-Methoden, um transparente Unterstützung für sowohl Unicode als auch normale Strings zu bieten.

Änderungen unter Windows

Der Installer führt keinen separaten Tcl/Tk-Installer mehr aus; stattdessen werden die benötigten Tcl/Tk-Dateien direkt im Python-Verzeichnis installiert. Wenn Sie bereits eine Tcl/Tk-Installation haben, verschwendet dies etwas Speicherplatz (ca. 4 MB), vermeidet aber Probleme mit widersprüchlichen Tcl/Tk-Installationen und erleichtert Python erheblich die Sicherstellung, dass Tcl/Tk alle seine Dateien finden kann. Hinweis: Die Alpha-Installer enthalten nicht die Dokumentation.

Der Windows-Installer installiert standardmäßig in Python16 auf dem Standardlaufwerk, anstatt in Program FilesPython-1.6.

Geänderte Werkzeuge

IDLE – vollständige Überarbeitung. Weitere Informationen finden Sie auf der IDLE-Homepage. (Python 1.6 Alpha 1 wird mit IDLE 0.6 ausgeliefert.)

Tools/i18n/pygettext.py – Python-Äquivalent von xgettext(1). Ein Werkzeug zum Extrahieren von Nachrichtentexten, das zur Internationalisierung von Anwendungen in Python verwendet wird.

Veraltete Module

stdwin und alles, was es verwendet. (Holen Sie sich Python 1.5.2, wenn Sie es brauchen. :-)

soundex. (Skip Montanaro hat eine Version in Python, aber sie wird nicht in der Python-Veröffentlichung enthalten sein.)

cmp, cmpcache, dircmp. (Ersetzt durch filecmp.)

dump. (Verwenden Sie pickle.)

find. (Leicht mit os.walk() zu codieren.)

grep. (Nicht sehr nützlich als Bibliotheksmodul.)

packmail. (Hat keinen Nutzen mehr.)

poly, zmod. (Diese waren bestenfalls schlechte Beispiele.)

strop. (Wird vom String-Modul nicht mehr benötigt.)

util. (Diese Funktionalität wurde längst woanders eingebaut).

whatsound. (Verwenden Sie sndhdr.)

Detaillierte Änderungen von 1.6b1 zu 1.6

Leichte Änderungen an der CNRI-Lizenz. Ein Copyright-Hinweis wurde hinzugefügt; die Anforderung, die Art der Modifikationen anzugeben, gilt jetzt, wenn ein abgeleitetes Werk "anderen" statt nur "der Öffentlichkeit" zur Verfügung gestellt wird; Version und Datum wurden aktualisiert. Die neue Lizenz hat einen neuen Griff.

Das Paket Tools/compiler wurde hinzugefügt. Dies ist ein Projekt unter der Leitung von Jeremy Hylton, um den Python-Bytecode-Generator in Python zu schreiben.

Die Funktion math.rint() wurde entfernt.

In Python.h wurde "#define _GNU_SOURCE 1" hinzugefügt.

Version 0.9.1 von Greg Wards distutils ist enthalten (anstelle von Version 0.9).

Eine neue Version von SRE ist enthalten. Sie ist stabiler und besser kompatibel mit dem alten RE-Modul. Nicht übereinstimmende Bereiche werden durch -1, nicht durch None angezeigt. (Die Dokumentation sagte None, aber die PRE-Implementierung verwendete -1; eine Änderung zu None würde bestehenden Code brechen.)

Das winreg-Modul wurde in _winreg umbenannt. (Es gibt Pläne für eine höherwertige API namens winreg, aber diese hat sich noch nicht in einer Form materialisiert, die für die Experten akzeptabel ist.)

Das _locale-Modul ist standardmäßig aktiviert.

Die Konfigurationszeile für das _curses-Modul wurde korrigiert.

Einige Abstürze wurden behoben, insbesondere <file>.writelines() mit einer Liste, die keine String-Objekte enthielt, führte zu einem Absturz, und es gab Situationen, in denen ein verlorener SyntaxError einen Core-Dump verursachen konnte.

Die Methode <list>.extend() akzeptiert nun ein beliebiges Sequenzargument.

Wenn __str__() oder __repr__() ein Unicode-Objekt zurückgibt, wird dies in einen 8-Bit-String konvertiert.

Unicode-String-Vergleiche berücksichtigen nicht mehr die Besonderheiten der UTF-16-Kodierung; es handelt sich um einen direkten 16-Bit-Vergleich.

Der Windows-Installer installiert nun die LICENSE-Datei und registriert die Python-DLL-Version nicht mehr in der Registrierung (dies ist nicht mehr erforderlich). Er verwendet nun Tcl/Tk 8.3.2.

Einige Portabilitätsprobleme wurden behoben, insbesondere ein Kompilierungsfehler mit socklen_t.

Die PC-Konfiguration ist für Nicht-Microsoft-Compiler etwas benutzerfreundlicher.