5. Python unter macOS verwenden

Dieses Dokument gibt einen Überblick über das macOS-spezifische Verhalten, das du kennen solltest, um mit Python auf Mac-Rechnern anzufangen. Python auf einem Mac unter macOS ist dem Python auf anderen unixartigen Plattformen sehr ähnlich, bei der Installation und bei einigen Funktionen gibt es aber Unterschiede.

Es gibt verschiedene Wege, Python für macOS zu beziehen und zu installieren. Vorgefertigte Fassungen der neuesten Python-Versionen bieten mehrere Distributoren an. Dieses Dokument beschreibt überwiegend die Verwendung der Pythons, die das CPython-Veröffentlichungsteam auf der Webseite python.org zum Herunterladen bereitstellt. Einige andere Möglichkeiten stehen unter Alternative Distributionen.

5.1. Python für macOS von python.org verwenden

5.1.1. Installationsschritte

Für aktuelle Python-Versionen (außer denen im Zustand security) erstellt das Veröffentlichungsteam zu jeder neuen Veröffentlichung ein Installationspaket Python for macOS. Eine Liste der verfügbaren Installationsprogramme steht auf der macOS-Downloadseite. Wir empfehlen, wo möglich die neueste unterstützte Python-Version zu verwenden. Die aktuellen Installationsprogramme liefern einen Build als universal2-Binärdatei, der auf allen Macs (Apple Silicon und Intel) nativ läuft, die von einer breiten Reihe von macOS-Versionen unterstützt werden — derzeit üblicherweise ab mindestens macOS 10.15 Catalina.

Die heruntergeladene Datei ist ein gewöhnliches macOS-Installationspaket (.pkg). Angaben zur Unversehrtheit der Datei (etwa Prüfsumme, Größe und Sigstore-Signatur) stehen für jede Datei auf der Downloadseite der Veröffentlichung. Installationspakete und ihr Inhalt sind mit Apple-Developer-ID-Zertifikaten der Python Software Foundation signiert und notarisiert, um die Anforderungen von macOS Gatekeeper zu erfüllen.

Für eine Standardinstallation doppelklicke auf die heruntergeladene Installationspaketdatei. Damit sollte das übliche Installationsprogramm von macOS starten und den ersten von mehreren Installationsschritten anzeigen.

../_images/mac_installer_01_introduction.png

Ein Klick auf Fortfahren bringt die Datei Bitte lesen dieses Installationsprogramms zum Vorschein. Neben anderen wichtigen Hinweisen dokumentiert Bitte lesen, welche Python-Version installiert wird und auf welchen macOS-Versionen sie unterstützt ist. Möglicherweise musst du blättern, um die ganze Datei zu lesen. Standardmäßig wird dieses Bitte lesen auch in /Applications/Python 3.15/ installiert und ist jederzeit nachzulesen.

../_images/mac_installer_02_readme.png

Ein Klick auf Fortfahren zeigt als Nächstes die Lizenz für Python und für weitere mitgelieferte Software an. Du musst den Lizenzbedingungen dann mit Akzeptieren zustimmen, bevor es zum nächsten Schritt weitergeht. Auch diese Lizenzdatei wird installiert und lässt sich später nachlesen.

../_images/mac_installer_03_license.png

Nachdem die Lizenzbedingungen angenommen sind, folgt die Anzeige Installationstyp. Für die meisten Zwecke ist der übliche Satz von Installationsschritten passend.

../_images/mac_installer_04_installation_type.png

Mit der Schaltfläche Anpassen kannst du einzelne Paketbestandteile des Installationsprogramms weglassen oder auswählen. Klicke auf einen Paketnamen, um eine Beschreibung dessen zu sehen, was er installiert. Zur optionalen Free-Threading-Funktion, die standardmäßig installiert wird, siehe Free-Threading-Binärdateien installieren.

../_images/mac_installer_05_custom_install.png

In beiden Fällen beginnt ein Klick auf Installieren den Installationsvorgang und fragt um Erlaubnis, neue Software zu installieren. Dazu ist ein macOS-Benutzername mit Administrator-Recht nötig, denn das installierte Python steht allen Benutzern des Macs zur Verfügung.

Ist die Installation abgeschlossen, erscheint das Fenster Zusammenfassung.

../_images/mac_installer_06_summary.png

Doppelklicke auf das Symbol beziehungsweise die Datei Install Certificates.command im Fenster /Applications/Python 3.15/, um die Installation abzuschließen.

../_images/mac_installer_07_applications.png

Damit öffnet sich ein vorübergehendes Fenster der Shell Terminal, das mit dem neuen Python SSL-Wurzelzertifikate für dessen Verwendung herunterlädt und installiert.

../_images/mac_installer_08_install_certificates.png

Erscheinen Successfully installed certifi und update complete im Terminalfenster, ist die Installation abgeschlossen. Schließe dieses Terminalfenster und das Fenster des Installationsprogramms.

Eine Standardinstallation umfasst:

  • Einen Ordner Python 3.15 in deinem Ordner Applications. Darin findest du IDLE, die Entwicklungsumgebung, die zum festen Bestand der offiziellen Python-Distributionen gehört, sowie Python Launcher, der das Doppelklicken von Python-Skripten im Finder von macOS behandelt.

  • Ein Framework /Library/Frameworks/Python.framework, das die ausführbare Python-Datei und die Bibliotheken enthält. Das Installationsprogramm fügt diesen Ort deinem Shell-Pfad hinzu. Um Python zu deinstallieren, kannst du diese drei Dinge entfernen. Symbolische Verknüpfungen auf die ausführbare Python-Datei liegen in /usr/local/bin/.

Bemerkung

Neuere macOS-Versionen enthalten einen Befehl python3 in /usr/bin/python3, der auf eine meist ältere und unvollständige Python-Version verweist, die von den Apple-Entwicklungswerkzeugen Xcode beziehungsweise den Command Line Tools for Xcode mitgebracht und für diese verwendet wird. Du solltest diese Installation niemals verändern oder zu löschen versuchen, denn sie wird von Apple verwaltet und von Software von Apple und von Dritten verwendet. Wenn du eine neuere Python-Version von python.org installierst, hast du zwei verschiedene, aber funktionierende Python-Installationen auf deinem Rechner, die nebeneinander bestehen können. Die Standardoptionen des Installationsprogramms sollten sicherstellen, dass dessen python3 anstelle des System-python3 verwendet wird.

5.1.2. Wie man ein Python-Skript ausführt

Es gibt zwei Wege, den Python-Interpreter aufzurufen. Wenn du mit einer Unix-Shell in einem Terminalfenster vertraut bist, kannst du python3.15 oder python3 aufrufen, wahlweise gefolgt von einer oder mehreren Befehlszeilenoptionen (beschrieben unter Befehlszeile und Umgebung). Das Python-Tutorial hat außerdem einen nützlichen Abschnitt darüber, Python interaktiv aus einer Shell zu verwenden.

Du kannst den Interpreter auch über eine integrierte Entwicklungsumgebung aufrufen. IDLE — Python editor and shell ist eine einfache Editor- und Interpreterumgebung, die zur Standarddistribution von Python gehört. IDLE hat ein Hilfemenü, über das du die Python-Dokumentation erreichst. Wenn Python für dich völlig neu ist, kannst du dort die Einführung des Tutorials lesen.

Es gibt viele weitere Editoren und Entwicklungsumgebungen, mehr dazu unter Editoren und IDEs.

Um eine Python-Skriptdatei aus dem Terminalfenster auszuführen, kannst du den Interpreter mit dem Namen der Skriptdatei aufrufen:

python3.15 myscript.py

Um dein Skript aus dem Finder auszuführen, hast du zwei Möglichkeiten:

  • Zieh es auf Python Launcher.

  • Wähle Python Launcher über das Informationsfenster des Finders als Standardanwendung zum Öffnen deines Skripts (oder jedes .py-Skripts) und doppelklicke darauf. Python Launcher hat mehrere Einstellungen, mit denen sich steuern lässt, wie dein Skript gestartet wird. Mit gedrückter Wahltaste ziehen erlaubt dir, diese für einen einzelnen Aufruf zu ändern, oder du änderst sie über sein Menü Preferences grundsätzlich.

Sei dir bewusst, dass ein Skript, das du direkt aus dem Finder von macOS startest, andere Ergebnisse liefern kann als aus einem Terminalfenster, denn es läuft dann nicht in der üblichen Shell-Umgebung, einschließlich aller Umgebungsvariablen aus den Shell-Profilen. Und wie bei jedem anderen Skript oder Programm: sei dir sicher, was du gerade ausführst.

5.2. Alternative Distributionen

Neben dem üblichen Installationsprogramm von python.org für macOS gibt es Distributionen von Dritten für macOS, die zusätzliche Funktionen enthalten können. Einige verbreitete Distributionen und ihre wichtigsten Eigenschaften:

ActivePython

Installationsprogramm mit plattformübergreifender Verträglichkeit, Dokumentation

Anaconda

Verbreitete wissenschaftliche Module (etwa numpy, scipy und pandas) und der Paketmanager conda.

Homebrew

Paketmanager für macOS, der mehrere Python-Versionen und viele auf Python aufbauende Pakete von Dritten umfasst (darunter numpy, scipy und pandas).

MacPorts

Ein weiterer Paketmanager für macOS, der mehrere Python-Versionen und viele auf Python aufbauende Pakete von Dritten umfasst. Enthält möglicherweise vorgefertigte Python-Fassungen und viele Pakete für ältere macOS-Versionen.

Beachte, dass die Distributionen nicht die neuesten Versionen von Python oder anderen Bibliotheken enthalten müssen und nicht vom Kern-Team von Python gepflegt oder unterstützt werden.

5.3. Zusätzliche Python-Pakete installieren

Mehr dazu im Python Packaging User Guide.

5.4. GUI-Programmierung

Für das Bauen von GUI-Anwendungen auf dem Mac mit Python gibt es mehrere Möglichkeiten.

Das Standard-GUI-Toolkit von Python ist tkinter, das auf dem plattformübergreifenden Tk-Toolkit aufbaut (https://www.tcl.tk). Eine macOS-native Fassung von Tk liegt dem Installationsprogramm bei.

PyObjC ist eine Python-Anbindung an Apples Objective-C/Cocoa-Framework. Angaben zu PyObjC stehen unter pyobjc.

Es gibt mehrere alternative GUI-Toolkits für macOS, darunter:

  • PySide: Offizielle Python-Anbindungen an das Qt-GUI-Toolkit.

  • PyQt: Alternative Python-Anbindungen an Qt.

  • Kivy: Ein plattformübergreifendes GUI-Toolkit, das Desktop- und Mobilplattformen unterstützt.

  • Toga: Teil des BeeWare Project, unterstützt Desktop-, Mobil-, Web- und Konsolenanwendungen.

  • wxPython: Ein plattformübergreifendes Toolkit, das Desktop-Betriebssysteme unterstützt.

  • Flet: A framework for building cross-platform desktop, mobile, and web applications in Python.

5.5. Fortgeschrittene Themen

5.5.1. Free-Threading-Binärdateien installieren

Added in version 3.13.

Geändert in Version 3.15: Die Unterstützung für Free-Threading wird jetzt standardmäßig installiert.

Das Installationspaket Python for macOS von python.org installiert standardmäßig einen zusätzlichen Build von Python 3.15, der free threading unterstützt (Betrieb mit abgeschaltetem global interpreter lock). Mögliche aktuellere Hinweise stehen auf der Veröffentlichungsseite auf python.org.

Der Free-Threading-Betrieb funktioniert und wird weiter verbessert, bei Arbeitslasten mit nur einem Thread gibt es gegenüber dem gewöhnlichen Build aber etwas Mehraufwand. Außerdem sind Pakete von Dritten, besonders solche mit einem extension module, möglicherweise noch nicht für die Verwendung in einem Free-Threading-Build bereit und schalten den GIL wieder ein. Seit Python 3.15 wird die Free-Threading-Unterstützung standardmäßig installiert. Sie ist als eigene Installationsoption verpackt, die sich über die Schaltfläche Anpassen im Schritt Installationstyp des Installationsprogramms abwählen lässt, wie oben beschrieben.

../_images/mac_installer_09_custom_install_free_threaded.png

Ist das Kästchen neben dem Paketnamen Free-threaded Python angekreuzt (was standardmäßig der Fall ist), wird neben dem gewöhnlichen Python.framework in /Library/Frameworks zusätzlich ein eigenes PythonT.framework installiert. Dieser Aufbau erlaubt es, einen Free-Threading-Build von Python 3.15 mit geringem Risiko neben einem herkömmlichen Build (nur mit GIL) von Python 3.15 auf deinem System bestehen zu lassen, während du installierst oder testest. Dieser Installationsaufbau kann sich in künftigen Veröffentlichungen ändern.

Bekannte Einschränkungen und Vorsichtshinweise:

  • Das Paket UNIX command-line tools, das standardmäßig ausgewählt ist, legt in /usr/local/bin Verknüpfungen für python3.15t, den Free-Threading-Interpreter, und python3.15t-config an, ein Konfigurationshilfsmittel, das für Paketbauer nützlich sein kann. Da /usr/local/bin üblicherweise in deinem Shell-PATH enthalten ist, sollten in den meisten Fällen keine Änderungen an deiner Umgebungsvariablen PATH nötig sein, um python3.15t zu verwenden.

  • In dieser Veröffentlichung unterstützen das Paket Shell profile updater und die Datei Update Shell Profile.command in /Applications/Python 3.15/ das Free-Threading-Paket nicht.

  • Der Free-Threading-Build und der herkömmliche Build haben getrennte Suchpfade und getrennte Verzeichnisse site-packages. Wenn du ein Paket also in beiden Builds brauchst, muss es standardmäßig möglicherweise in beiden installiert werden. Das Free-Threading-Paket installiert eine eigene Instanz von pip für die Verwendung mit python3.15t.

    • Um ein Paket mit pip ohne venv zu installieren:

      python3.15t -m pip install <package_name>
  • Wenn du mit mehreren Python-Umgebungen arbeitest, ist es meist am sichersten und einfachsten, virtuelle Umgebungen anzulegen und zu verwenden. Das vermeidet mögliche Namenskonflikte bei Befehlen und Unklarheit darüber, welches Python gerade verwendet wird:

    python3.15t -m venv <venv_name>

    dann activate.

  • Um eine Free-Threading-Fassung von IDLE auszuführen:

    python3.15t -m idlelib
  • Die Interpreter beider Builds reagieren auf dieselben PYTHON-Umgebungsvariablen, was zu unerwarteten Ergebnissen führen kann, etwa wenn du PYTHONPATH in einem Shell-Profil gesetzt hast. Bei Bedarf gibt es Befehlszeilenoptionen wie -E, um diese Umgebungsvariablen zu ignorieren.

  • Der Free-Threading-Build linkt gegen die gemeinsam genutzten Bibliotheken von Dritten, etwa OpenSSL und Tk, die im herkömmlichen Framework installiert sind. Das heißt, beide Builds teilen auch einen Satz Vertrauenszertifikate, wie ihn das Skript Install Certificates.command installiert — es muss daher nur einmal ausgeführt werden.

  • Wenn du dich nicht darauf verlassen kannst, dass die Verknüpfung in /usr/local/bin auf das Free-Threading-python3.15t von python.org zeigt (etwa weil du dort deine eigene Fassung installieren möchtest oder eine andere Distribution das tut), kannst du deine Shell-Umgebungsvariable PATH ausdrücklich so setzen, dass sie das Verzeichnis bin des PythonT-Frameworks einschließt:

    export PATH="/Library/Frameworks/PythonT.framework/Versions/3.15/bin":"$PATH"

    Die herkömmliche Framework-Installation macht standardmäßig etwas Ähnliches, nur mit Python.framework. Bedenke, dass beide Framework-Verzeichnisse bin in PATH zu Verwirrung führen können, wenn es in beiden gleiche Namen wie python3.15 gibt — welcher dann tatsächlich verwendet wird, hängt von der Reihenfolge in PATH ab. Die Befehle which python3.x beziehungsweise which python3.xt zeigen, welcher Pfad verwendet wird. Virtuelle Umgebungen helfen, solche Unklarheiten zu vermeiden. Eine andere Möglichkeit wäre ein Shell-alias auf den gewünschten Interpreter, etwa:

    alias py3.15="/Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15"
    alias py3.15t="/Library/Frameworks/PythonT.framework/Versions/3.15/bin/python3.15t"

5.5.2. Über die Befehlszeile installieren

Wenn du das Installationspaket von python.org automatisiert installieren möchtest (statt über die gewohnte macOS-Anwendung Installer), kannst du mit dem macOS-Befehlszeilenwerkzeug installer auch Optionen abseits der Vorgaben wählen. Wenn du installer nicht kennst, kann es etwas kryptisch wirken (mehr dazu unter man installer). Der folgende Shell-Auszug zeigt beispielhaft einen Weg, und zwar mit der Veröffentlichung 3.15.0b2 und abgewählter Option für den Free-Threading-Interpreter:

RELEASE="python-3.150b2-macos11.pkg"

# download installer pkg
curl -O https://www.python.org/ftp/python/3.15.0/${RELEASE}

# create installer choicechanges to customize the install:
#    disable the PythonTFramework-3.15 package
#    while accepting the other defaults (install all other packages)
cat > ./choicechanges.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
        <dict>
                <key>attributeSetting</key>
                <integer>0</integer>
                <key>choiceAttribute</key>
                <string>selected</string>
                <key>choiceIdentifier</key>
                <string>org.python.Python.PythonTFramework-3.15</string>
        </dict>
</array>
</plist>
EOF

sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

Nach einer Standardinstallation kannst du so prüfen, dass beide Builds verfügbar sind:

$ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled
$ /usr/local/bin/python3.15t -VV
Python 3.15.0b2 free-threading build (v3.15.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ #    and the traditional interpreter
$ /usr/local/bin/python3.15 -VV
Python 3.15.0b2 (v3.15.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
$ # test that they are also available without the prefix if /usr/local/bin is on $PATH
$ python3.15t -VV
Python 3.15.0b2 free-threading build (v3.15.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ python3.15 -VV
Python 3.15.0b2 (v3.15.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

Bemerkung

Die aktuellen Installationsprogramme von python.org installieren nur an feste Orte wie /Library/Frameworks/, /Applications und /usr/local/bin. Die Option -domain von installer lässt sich nicht verwenden, um an andere Orte zu installieren.

5.5.3. Python-Anwendungen weitergeben

Es gibt eine Reihe von Werkzeugen, die deinen Python-Code in eine eigenständige, weitergebbare Anwendung verwandeln:

  • py2app: Unterstützt das Erzeugen von macOS-.app-Bündeln aus einem Python-Projekt.

  • Briefcase: Teil des BeeWare Project, ein plattformübergreifendes Paketierwerkzeug, das das Erzeugen von .app-Bündeln unter macOS unterstützt und auch Signieren und Notarisieren übernimmt.

  • PyInstaller: Ein plattformübergreifendes Paketierwerkzeug, das eine einzelne Datei oder einen Ordner als weitergebbares Erzeugnis erstellt.

5.5.4. Vorgaben des App Store erfüllen

Anwendungen, die zur Weitergabe über den macOS App Store eingereicht werden, müssen Apples App-Prüfverfahren durchlaufen. Dieses Verfahren umfasst eine Reihe automatischer Prüfregeln, die das eingereichte Anwendungsbündel auf bedenklichen Code untersuchen.

Die Python-Standardbibliothek enthält Code, von dem bekannt ist, dass er gegen diese automatischen Regeln verstößt. Diese Verstöße scheinen zwar Fehlalarme zu sein, Apples Prüfregeln lassen sich aber nicht anfechten. Deshalb ist es nötig, die Python-Standardbibliothek zu verändern, damit eine Anwendung die Prüfung des App Store besteht.

Der Python-Quellbaum enthält eine Patch-Datei, die allen Code entfernt, von dem bekannt ist, dass er im Prüfverfahren des App Store Schwierigkeiten macht. Dieser Patch wird automatisch angewandt, wenn CPython mit der Option --with-app-store-compliance konfiguriert wird.

Dieser Patch ist für die Verwendung von CPython auf einem Mac normalerweise nicht erforderlich, und er ist auch nicht erforderlich, wenn du eine Anwendung außerhalb des macOS App Store weitergibst. Er ist nur dann erforderlich, wenn du den macOS App Store als Vertriebsweg nutzt.

5.6. Weitere Quellen

Die Hilfeseite von python.org verweist auf viele nützliche Quellen. Die Mailingliste Pythonmac-SIG ist eine weitere Unterstützungsquelle speziell für Python-Anwender und -Entwickler auf dem Mac.