Предотвращение поломки Homebrew при установке pyenv

Предотвращение поломки Homebrew при установке pyenv

Можно использоватьpyenvдля установки и переключения между несколькими версиями Python, что полезно при разработке и тестировании программного обеспечения, ориентированного на версии Python, которые не являются просто последними. Одной из зависимостей этих установок Python является readline, которая устанавливается brew.

Проблема, которую я обнаружил, заключается в том, что brew периодически берет на себя установку новой версии readline. Хотя в системе может присутствовать несколько версий readline, только одна из них имеет символическую ссылку в /usr/local/opt/readline.

Если brew обновляется до новой версии readline, Python внезапно начинает выдавать текст, как ^[[Aпри попытке использовать клавиши курсора для редактирования строки. Если вы затем попытаетесь сделать это явно, import readlineвы увидите ошибку вроде этой:

>>> 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

Он ищет /usr/local/opt/readline/lib/libreadline.7.dylib. Проблема, по-видимому, в том, что при pyenv installсборке Python /usr/local/opt/readlineбыла символическая ссылка, /usr/local/Cellar/readline/7.0.5содержащая lib/libreadline.7.dylib. Этот файл все еще присутствует! Но он больше не доступен по этому пути, так как brew обновил символическую ссылку, чтобы она указывала на версию 8.

Я могу brew switch readline 7.0.5снова поменять их местами, и Python pyenv снова заработает. Но теперьHomebrew'sPython сломан примерно таким же образом. Есть ли какой-то разумный способ заставить их сосуществоватьи не сломаться снова спонтаннов следующий раз, когда Homebrew установит новую версию readline?

решение1

Я не нашел readline 7 в /usr/local/opt/readline/lib/папке, но нашел только libreadline.8.0.dylib. Я решил проблему с помощью этого решения.

https://superuser.com/a/1411220

По сути, вам просто нужно создать мягкую ссылку:

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

Связанный контент