CPython unter macOS ARM64 (Apple M1) kompilieren

Auf der Download-Seite der Python Foundation können die zur Verfügung stehenden Python-Versionen für Linux, macOS und Windows heruntergeladen werden. Der Quelltext für aktuelle und zukünftige Versionen wird hingegen auf auf Github zur Verfügung gestellt. Mit der Anweisung

$ git clone --branch 3.10 https://github.com/python/cpython

lässt sich beispielsweise CPython in Version 3.10 herunterladen. Voraussetzung ist freilich, dass auf dem Mac das Programm git installiert ist. Falls also obige Anweisung eine Fehlermeldung zur Folge haben sollte, hilft

$ xcode-select --install

weiter. Diese Installation muss ohnehin ausgeführt werden, denn damit gelangen die erforderlichen C-Compiler auf das System.

Weiter geht es mit Homebrew. Die Installation dieses Paketmanagers erfolgt mithilfe von curl. Auf der Internetseite des Homebrew-Projekts findet sich die vollständige Anweisung. Diese kopiert Ihr, fügt sie in der Shell ein, und führt sie aus. Weitere Informationen zu Homebrew gibt es hier.

Sobald der Paketmanager zur Verfügung steht, können die noch fehlenden Pakete mit

$ brew install openssl xz zlib gdbm sqlite

installiert werden.

Und dann kann das Kompilieren des Quellcodes beginnen. Wie bereits oben erwähnt, holt Ihr Euch die gewünschte Version (hier: 3.10) auf das System und wechselt dann in das Verzeichnis:

$ git clone --branch 3.10 https://github.com/python/cpython
$ cd cpython

Anschließend muss das configure-Skript ausgeführt werden:

$ CPPFLAGS="-I$(brew --prefix zlib)/include" \
LDFLAGS="-L$(brew --prefix zlib)/lib" \
./configure --with-openssl=$(brew --prefix openssl) \
--with-pydebug

Dabei können — müssen aber nicht — Warnmeldungen erscheinen. Diese können in der Regel ignoriert werden, betrifft es doch meistens nicht kompatible Pakete.

Die Option --with-pydebug kann übrigens auch weggelassen werden. Wie der Name vermuten lässt, ist hiermit das Debugging möglich, was eher für CPython-Entwickler von Interesse sein dürfte.

Der eigentliche Build-Vorgang wird jetzt mit

$ make -j2 -s

gestartet. Über die Option -j2 wird die Anzahl der für diesen Vorgang zu nutzenden Kerne festgelegt. Und -s steht für silent, was verhindert, dass alle ausgeführten Befehle angezeigt werden. Auch hier mögen Warnmeldung betreffend nicht kompatibler Pakete erscheinen, die Ihr ignorieren könnt.

Auf das Kompilieren folgt die Installation:

$ make altinstall

Damit wird Python 3.x zur Eurem macOS hinzugefügt. Wie Ihr der Ausgabe in der Shell entnehmen könnt, werden die Dateien in den Verzeichnissen

/usr/local/lib

und

/usr/local/bin

installiert.

Über die Eingabe von

$ python3.10

sollte nun die Python-Shell aufrufbar sein. Bei mir führt dies zu folgender Rückmeldung:

Python 3.10.0b1+ (heads/3.10:5abc681019, May 14 2021, 16:02:24) [Clang 12.0.5 (clang-1205.0.22.9)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Ein abschließender Hinweis: Die hier beschriebenen Schritte habe ich auf einem Mac mit Apples neuem M1-Chip vorgenommen. Es funktioniert aber auch auf einem Intel-Mac. Im Gegensatz zu einem M1-Mac, kann das Kompilieren aber deutlich länger dauern.