Python eignet sich sehr gut zum Schreiben von AWS Lambda-Funktionen. Für die lokale Entwicklung möchten Sie vielleicht die gesamte Palette der unterstützten Python-Laufzeiten auf Ihrem Mac ausführen können. Leider ist die Einrichtung nicht so einfach, wie Sie vielleicht denken.
Eine gute Möglichkeit, Installationen verschiedener Python-Versionen zu verwalten, ist die Verwendung von pyenv. Obwohl die Installation von pyenv selbst trivial ist, könnten Sie später auf einige Probleme stoßen. Dieser Beitrag ist nicht als Einführung in pyenv gedacht, sondern als Anleitung zur Lösung der folgenden Probleme:
- Python-Versionen lassen sich nicht kompilieren
- ein mit pyenv verwaltetes Python verträgt sich nicht mit Homebrew
- eine von Homebrew verwaltete Python-Umgebung stört pyenv
In diesem Beitrag erfahren Sie, wie Sie Ihr System konfigurieren, um diese Probleme zu vermeiden.
Pyenv einrichten
Es genügt, pyenv mit Homebrew zu installieren und eine kleine Änderung an der Konfiguration Ihrer Shell vorzunehmen, damit pyenv selbst richtig funktioniert. (Vergessen Sie nicht, Ihre Shell neu zu laden, nachdem Sie ihre Konfiguration geändert haben).
brew install pyenv
| Shell | Config-Schnipsel | Config-Datei |
|---|---|---|
| bash | eval (pyenv init -) | ~/.bash_profile oder ~/.bashrc |
| zsh | eval (pyenv init -) | ~/.zshenv |
| Fisch | Quelle (pyenv init - |psub) | ~/.config/fish/config.fish |
Wenn Sie jetzt jedoch versuchen, eine Python-Version zu installieren, wird dies höchstwahrscheinlich fehlschlagen. Sie müssen zunächst sicherstellen, dass Sie die Abhängigkeiten für die Erstellung von Python installiert haben.
Trick #1: Installieren Sie Build-Abhängigkeiten
Einige Entwicklungs-Header sind für die Kompilierung von Python auf Ihrem Mac erforderlich.Nach der Installation von macOS-Updates müssen Sie diese Header (erneut) installieren! Siehe: pyenv/pyenv Wiki - GitHubsudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Obwohl nicht erforderlich, empfiehlt das pyenv-Wiki die Installation einiger zusätzlicher Bibliotheken.
brew install openssl readline sqlite3 xz zlib
Nun versuchen Sie, eine beliebige Python-Version zu installieren, indem Sie pyenv install $VERSION ausführen. Eine Liste der verfügbaren Versionen finden Sie unter pyenv install --list.
pyenv install 3.7.2
pyenv install 3.6.8
pyenv install 2.7.15
Schließlich konfigurieren Sie pyenv so, dass eine dieser Python-Versionen standardmäßig verwendet wird.
pyenv global 3.7.2
Lassen Sie pyenv mit Homebrew zusammenarbeiten
Wenn Sie brew doctor verwenden, könnte es einige Beschwerden geben.
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.
Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
~/.pyenv/shims/python3.6m-config
~/.pyenv/shims/python3.7-config
~/.pyenv/shims/python3.7m-config
~/.pyenv/shims/python-config
~/.pyenv/shims/python3-config
~/.pyenv/shims/python3.6-config
Wenn Sie dieses Problem nicht lösen, kann es sein, dass jedes von Homebrew abhängige Python-Paket gegen eine von pyenv verwaltete Python-Version kompiliert wird. Siehe den zweiten Trick, um ein Wrapper-Skript zu erstellen, das diese Probleme löst.
Trick #2: Ein Wrapper für das Gebräu
Erstellen Sie das folgende Wrapper-Skript für dasbrewausführbare Datei mit dem folgenden Inhalt.Speichern Sie es, auch unter dem Namen#!/bin/sh # check if pyenv is available # edit: fixed redirect issue in earlier version if which pyenv >/dev/null 2>&1; then # assumes default location of brew in/usr/local/bin/brew/usr/bin/env PATH="${PATH//$(pyenv root)/shims:/}" /usr/local/bin/brew "$@" else /usr/local/bin/brew "$@" fibrew, an einem Ort, der in Ihrem $PATH eine höhere Priorität hat als die eigentliche ausführbare Datei brew, damit dieses Wrapper-Skript anstelle des echten brew ausgeführt wird. (Vergessen Sie nicht, das Wrapper-Skript ausführbar zu machen!) Siehe: pyenv spielt nicht nett mit brew "config". [$5] #106
Wenn Sie brew doctor mit diesem Wrapper ausführen, ist er zufrieden.
$ brew doctor
Your system is ready to brew.
Lassen Sie brew mit pyenv zusammenarbeiten
Alle Pythons, die von pyenv verwaltet werden, sind schön an einem versteckten Ort versteckt, aber alles, was in einer von Homebrew verwalteten Python-Version installiert ist (einschließlich pip), befindet sich unter /usr/local/bin. Dieser Pfad könnte Vorrang vor den von pyenv verwalteten Shims haben und Ihr Erlebnis ruinieren.
Leider kann man die von Homebrew verwalteten Python-Versionen nicht einfach deinstallieren, da einige Pakete davon abhängen. Was Sie tun können, um Probleme zu vermeiden, ist Folgendes:
- deinstallieren Sie alle Pakete, die von Homebrew verwalteten Python-Versionen installiert wurden, siehe den dritten Trick
- Stellen Sie sicher, dass die pyenv Shims eine höhere Priorität haben als
/usr/local/binin Ihrem$PATH
Trick #3: Deinstallieren Sie pip-Pakete aus den von Homebrew verwalteten Python-Versionen
Wiederholen Sie diese Befehle, bis alle Pakete entfernt worden sind./usr/local/bin/pip2 freeze |xargs /usr/local/bin/pip2 uninstall -y /usr/local/bin/pip3 freeze |xargs /usr/local/bin/pip3 uninstall -y
Einpacken
Dieser Beitrag wurde geschrieben, um Ihnen bei der Lösung einiger Probleme mit pyenv zu helfen, er ist nicht als Anleitung für die Verwendung gedacht. Eine Bedienungsanleitung finden Sie in der Readme-Datei.
Viel Spaß beim Pythonsingen!
Verfasst von

Thomas de Ruiter
Cloud Consultant with a passion for everything Cloud. Likes to automate all the things. Believes security is everyone's responsibility!
Unsere Ideen
Weitere Blogs
Contact




