Python 3 mit PyGame 1.9 auf Mac OS X

Wenn Programmiersprachen die Hauptversionsnummer wechseln kommt es gerade bei Open Source Sprachen oft zu Verwerfungen in den Communities. Warum sollte es bei Python anders sein? Der Release von Python 3 wurde nicht gerade mit viel Liebe bedacht, vor allem mit dem Argument, dass diese oder jene Library nicht funktioniert. Dies stimmt und liegt in der Natur der Dinge. Auch bei anderer Open Source Software kommt es zu Kompatibilitätsproblemen, z.B. bei WordPress und entsprechenden Plugins. Im Regelfall erledigen sich diese Probleme im Laufe der Zeit.
So wird es sich auch bei Python entwickeln, dauerhaft auf veraltete Konstrukte zu setzen war niemals eine zukunftsorientierte Herangehensweise. Was im Python – Mikrokosmos momentan ärgerlich ist, ist die Inkompatibilität von PyGame mit Python 3 auf Mac OS X. Eine Lösung wird auf sich warten lassen, da das PyGame Team momentan an einer komplett neuen Version von PyGame arbeitet. Die Möglichkeit auf Python 2.7 auszuweichen finde ich persönlich sehr unbefriedigend.
Deshalb hier eine Anleitung wie man Pygame unter Mac OS X im Zusammenspiel mit Python 3 zum laufen bekommt:

Voraussetzung zum Kompilieren ist die Installation von Xcode, zu finden im Apple Developers Center oder auf der Mac OS X DVD. Ein Zugang zum Apple Dev Center schadet auf keinen Fall, sollte noch zusätzliche Software fehlen. Die Registrierung ist kostenlos.
Zusätzlich muss man eine Paketverwaltung installieren, meine erste Wahl ist hierbei MacPorts. MacPorts steht unter BSD Lizenz und kann frei heruntergeladen werden.

Das System der Paketverwaltung dürfte vielen von Linux bekannt sein, MacPorts wird über das Terminal mit

port install paketname

aufgerufen. MacPorts downloaded nun den entsprechenden Source Code, kompiliert und installiert ihn sofern entsprechende Port Skripte existieren. Mittlerweile gibt es 6100 Port Skripte für MacPorts. Eine Alternative zu MacPorts ist Fink.

PyGame hat einige Abhängigkeiten, die vor einem Installationsversuch aufgelöst werden müssen.

Folgende Dateien müssen gedownloaded und installiert werden. Dazu einfach das entsprechende Diskimage mounten und den Ordner in /Library/Frameworks/ kopieren. Dabei darauf achten, dass man es nicht in /User/Library/Frameworks/ kopiert.

SDL 1.2.14
SDL Mixer 1.2
SDL tff
SDL Image 1.2

Danach kann via MacPorts weitere benötigte Software samt Abhängigkeiten installiert werden. In Zeiten der Dauer Internetverbindung eigentlich Makulatur, aber für die folgenden Prozeduren muss zwingend eine Internetverbindung bestehen. Um fortzufahren gibt man im Terminal folgende Kommandos der Reihe nach ein:

sudo port install smpeg

sudo port install PORTMIDI

sudo port install JPEG

Jeder dieser Vorgänge dauert einiges an Zeit und es kann gerade bei den jeweiligen Build – Kommandos vorkommen, dass sich einige Minuten augenscheinlich nichts tut. Hier heißt es Geduld haben. Zusätzlich zu den drei oberen Programmen, benötigte ich noch die aktuellen Java Headers, die man im Apple Dev Center downloaden kann.

Sollten während der Prozedur der Installationen Warnings angezeigt werden, kann man diese getrost ignorieren. Error sorgen hingegen zum Abbruch der Prozedur und müssen behoben werden. Dankenswerterweise ist MacPorts sehr freigiebig mit Informationen und stößt einen direkt auf die Fehlerbehebung.

Hat bis hier hin alles geklappt, geht es nun daran PyGame zu kompilieren und zu installieren.
Auf der PyGame Seite downloaded man dazu den Source Code von Pygame, pygame-1.9.1release.tar.gz.
Je nach Speicherort navigiert man nun mit dem Terminal in den entsprechenden Ordner. Angenommen der Tar Ball befindet sich in Downloads kommt man mit cd Downloads in den Ordner.
Ein tar zxvf pygame-1.9.1release.tar.gz sorgt dafür, dass die Datei entpackt wird.

Tipp: Wenn man die ersten paar Buchstaben des Dateinamens eingegeben hat, sorgt ein drücken Tab dafür dass der Rest des Namens automatisch gesetzt wird.

Nachdem der PyGame Quellcode entpackt wurde, navigiert man sein Terminal mit cd pygame-1.9.1release in den neu geschaffenen Ordner. Dort gibt man nun python3 config.py ein.
Es werden verschiedenen Setup – Dateien geschaffen.
Wichtig ist nun die Setup Datei ohne Dateiendung zu öffnen. Mit Vi geht dies mit folgendem Kommando vi Setup sofern man sich mit dem Terminal noch im Ordner befindet.

In dem Setup File sucht man nun folgende Zeile:

pypm src/pypm.c $(SDL) $(PORTMIDI) $PORTTIME) $(DEBUG)

und kontrolliert ob diese auskommentiert ist. Wenn nicht setzt man vor die Zeile eine #.
Die Zeile muss auf jeden Fall so aussehen:

# pypm src/pypm.c $(SDL) $(PORTMIDI) $PORTTIME) $(DEBUG)

und ist in den meisten Editoren farblich als Kommentar hervorgehoben. Nicht vergessen die Datei zu speichern, bevor sie geschlossen wird.

Damit alles richtig kompiliert werden kann, muss man noch folgendes im Terminal ausführen. Dabei auf die exakte Schreibweise achten:

exportCC='/usr/bin/gcc-4.2' CFLAGS='isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386'

Nun kann der eigentliche Buildvorgang ausgeführt werden:

python3 setup.py build

Wie schon vorher gilt auch hier, Warnings können ignoriert werden, Error müssen aufgelöst werden.

Ist der Build durchgelaufen, der letzte Schritt, die Installation von PyGame:

sudo python3 setup.py install

Ab jetzt kann PyGame auch unter Mac OS X in Verindung mit Python 3 genutzt werden.
Viel Spass!

Ein abschließender Tipp: Sorgt für Strom. Den Fortschritt der Buildvorgänge kann man auf dem Mac Book Pro fast an der Ladeanzeige ablesen. Ein voll geladener Akku, der noch nicht sehr gelitten hat, braucht ungefähr 40% Kapazität bevor PyGame genutzt werden kann.