Blog

Ausführen des nicht unterstützten Azure Python SDK auf meinem brandneuen M2 Mac

Kris Geusebroek

Aktualisiert Oktober 15, 2025
5 Minuten

Wie es anfing

Bei der Installation von Software auf meinem neuen MacBook Pro M2 habe ich mit einer Neuinstallation begonnen, anstatt eine Sicherungskopie wiederherzustellen. Das klappte wunderbar, bis ich versuchte, einem von einem Kollegen geschriebenen Tutorial zu folgen, das das Azure Python SDK zur Erstellung eines Datensatzes und zum Hochladen auf ein Azure-Speicherkonto verwendet.

Der Fehler war nicht sehr aussagekräftig und recht allgemein gehalten:

ModuleNotFoundError: No module named 'azureml.dataprep'

Versuchen wir, das zu beheben

Eine Suche im Internet ergab, dass ich die Abhängigkeit von azureml-dataset-runtime installieren musste. Ich nahm an, dass dies bereits geschehen war, da in der Datei pyproject.toml darauf verwiesen wurde, aber ich war so naiv und versuchte, die Bibliothek zu installieren.

pip install azureml-dataset-runtime==1.40.0
Failed to build numpy
ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
[end of output]

Ich habe noch etwas weiter gesucht und ein bekanntes Problem mit dem Azure ML Python SDK auf M1 oder M2 MacBooks gefunden: Azure Python SDK Problem

Der Vorschlag war, Rosetta zu verwenden, um Python auf einem Mac auszuführen. Das hörte sich für mich etwas zu hart an, also suchte ich ein wenig weiter und stieß auf diesen Beitrag: How to create a separate Rosetta Terminal (Wie man ein separates Rosetta-Terminal erstellt ), in dem gezeigt wird, wie man eine separate Terminal Anwendung erstellt, die Rosetta verwendet. Leider funktionierte dies nicht auf dem M2 MacBook (Ventura), wie in den Kommentaren weiter unten im Thread angegeben. Die Diskussion in diesem Thread gab mir jedoch einige Hinweise für die weitere Suche nach einer Lösung.

Die Geschichte geht weiter

Also brauchte ich ein Programm namens Rosetta. Dabei handelt es sich um einen Emulator, mit dem Sie Anwendungen ausführen können, die ausschließlich für Intel-Prozessoren kompiliert wurden, um sie auf Apple-Silizium auszuführen. Und ja, das schien etwas zu sein, das ich brauchte. Aber nicht für meine gesamte Software, oder? Und auch nicht für alle meine Python-Projekte. Ich musste ein wenig mehr zu diesem Thema recherchieren und dann fiel mir dieser Stackoverflow-Beitrag ins Auge.

Eine zusätzliche Suche nach dem Befehl arch führte mich zu diesem letzten Befehl zum Starten einer Terminal-Sitzung mit der x86_64 Architektur:

arch -x86_64 /bin/zsh --login

damit dies funktioniert, muss Rosetta installiert sein. Sollte dies nicht der Fall sein, können Sie es mit diesem Befehl installieren:

softwareupdate --install-rosetta --agree-to-license

Die arch -x86_64 /bin/zsh --login ist eine nette Kommandozeile, aber nicht so leicht zu merken, also habe ich eine Hilfsfunktion in meinem .zshrc

# Rosetta start alternative session
switch_rosetta () {
    arch -x86_64 /bin/zsh --login
}

Das war's also?

Nun, nicht wirklich. Wir sind erst auf halbem Wege. Damit der Python-Code richtig funktioniert, brauchen wir mehr als nur eine separate Sitzung. Die verwendete Software muss auch architekturspezifisch sein. Ich musste also ein separates Homebrew installieren, das ich für die Installation von Software für die Rosetta-Umgebung verwenden konnte.

switch_rosetta

# install Homebrew
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Glücklicherweise wird die Rosetta-Version von Homebrew an einem anderen Ort installiert (/usr/local/Cellar und /usr/local/bin) als die bereits vorhandene Homebrew-Installation (/opt/homebrew und /opt/homebrew/bin)

Auf diese Weise können wir die benötigte Software für unser Projekt separat installieren.

brew install python@3.8
brew install azure-cli
brew install poetry
etc...

Fertigstellung der Einrichtung

Es wäre schön, wenn die Terminal-Sitzung die separaten Homebrew-Einstellungen usw. kennen würde. Also habe ich wieder einige Hilfsfunktionen in meinem .zshrc

# Rosetta alternative sessions
archcheck () {
   if [ "$(uname -p)" = "i386" ]
   then
     echo "Running in i386 mode (Rosetta)"
     eval "$(/usr/local/Homebrew/bin/brew shellenv)"
     # Remove /opt/homebrew/bin and /opt/homebrew/sbin from path to not interfere with /usr/local/bin
     path=( ${path[@]:#/opt/homebrew*} )
     # separate pypoetry cache directory to separate the different poetry virtual envs
     # Cache directory needs to be created: mkdir -p ${HOME}/Library/Caches/pypoetry-i386
     export POETRY_CACHE_DIR=${HOME}/Library/Caches/pypoetry-i386
     alias brew='/usr/local/Homebrew/bin/brew'
   elif [ "$(uname -p)" = "arm" ]
   then
     echo "Running in ARM mode (M2)"
     eval "$(/opt/homebrew/bin/brew shellenv)"
     # Remove /usr/local/bin from path to not interfere with /opt/homebrew
     path=( ${path[@]:#/usr/local/bin} )
     export POETRY_CACHE_DIR=${HOME}/Library/Caches/pypoetry
     alias brew='/opt/homebrew/bin/brew'
   else
     echo "Unknown architecture detected"
   fi
}
eval "archcheck"

Das war's

Jetzt kann ich problemlos zwischen Terminal-Sitzungen wechseln und die meisten Einstellungen werden automatisch in der Archcheck-Funktion vorgenommen. Es ist nicht 100%ig narrensicher. Zum Beispiel funktionieren die Befehle von nicht mehr. Im archcheck entferne ich /usr/local/bin aus dem Pfad, um die beiden von Homebrew installierten Softwarepakete nicht zu vermischen, aber auch Docker Desktop verwendet diesen Ort, um die symbolischen Links zu den Docker-Befehlen zu installieren. Ich habe das Problem behoben, indem ich diese symbolischen Links auch nach kopiert habe. Ich rechne damit, dass ich noch auf mehr dieser kleinen Macken stoßen werde, aber ich bin zumindest mit der aktuellen Lösung zufrieden.

Ich glaube, dass dies ein sehr guter Ausgangspunkt ist, von dem hoffentlich auch andere, die für AzureML entwickeln, profitieren werden.

Bereinigung

Sobald die gesamte Software mit Apple Sillicon kompatibel ist, sollten Sie die separate Homebrew-Installation bereinigen. Dieser Beitrag über die Deinstallation von Homebrew kann Ihnen als Ausgangspunkt dienen. Stellen Sie sicher, dass Sie dies in der Rosetta Terminal-Sitzung tun. Nach dieser Bereinigung kann auch die Datei .zshrc bereinigt werden.

Verfasst von

Kris Geusebroek

Contact

Let’s discuss how we can support your journey.