Verhindern Sie, dass Homebrew pyenv-Installationen beschädigt

Verhindern Sie, dass Homebrew pyenv-Installationen beschädigt

Es ist möglich,Abonnierenum mehrere Python-Versionen zu installieren und zwischen ihnen zu wechseln, was hilfreich ist, wenn Sie Software entwickeln und testen möchten, die auf andere Python-Versionen als die neuesten abzielt. Eine der Abhängigkeiten dieser Python-Installationen ist readline, das von brew installiert wird.

Das Problem, das ich festgestellt habe, ist, dass Brew regelmäßig selbst eine neue Version von Readline installiert. Obwohl mehrere Versionen von Readline auf dem System vorhanden sein können, ist nur eine davon unter /usr/local/opt/readline symbolisch verknüpft.

Wenn Brew auf eine neue Version von Readline aktualisiert, beginnt Python plötzlich, Text auszuspucken, wie ^[[Abeim Versuch, die Cursortasten zur Zeilenbearbeitung zu verwenden. Wenn Sie dies dann explizit versuchen, import readlinewird ein Fehler wie dieser angezeigt:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/********/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
  Referenced from: /Users/********/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so
  Reason: image not found

Es wird nach gesucht /usr/local/opt/readline/lib/libreadline.7.dylib. Das Problem scheint zu sein, dass beim pyenv installErstellen von Python /usr/local/opt/readlineein Symlink vorhanden war , /usr/local/Cellar/readline/7.0.5der enthielt lib/libreadline.7.dylib. Diese Datei ist noch vorhanden! Sie ist jedoch unter diesem Pfad nicht mehr verfügbar, da Brew den Symlink aktualisiert hat, sodass er auf Version 8 verweist.

Ich kann brew switch readline 7.0.5diese wieder austauschen, und pyenvs Python wird wieder funktionieren. Aber jetztSelbstgebrautesPython ist in ähnlicher Weise kaputt. Gibt es eine sinnvolle Möglichkeit, diese nebeneinander existieren zu lassen?und nicht spontan wieder brechendas nächste Mal, wenn Homebrew eine neue Version von Readline installiert?

Antwort1

Ich konnte Readline 7 im Ordner nicht finden /usr/local/opt/readline/lib/, ich habe bisher nur gefunden libreadline.8.0.dylib. Ich habe das Problem mit dieser Lösung gelöst.

https://superuser.com/a/1411220

Im Grunde müssen Sie nur einen Softlink erstellen:

sudo ln -s libreadline.8.0.dylib libreadline.7.dylib

verwandte Informationen