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 ^[[A
beim Versuch, die Cursortasten zur Zeilenbearbeitung zu verwenden. Wenn Sie dies dann explizit versuchen, import readline
wird 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 install
Erstellen von Python /usr/local/opt/readline
ein Symlink vorhanden war , /usr/local/Cellar/readline/7.0.5
der 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.5
diese 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.
Im Grunde müssen Sie nur einen Softlink erstellen:
sudo ln -s libreadline.8.0.dylib libreadline.7.dylib