Evite que Homebrew rompa las instalaciones de pyenv

Evite que Homebrew rompa las instalaciones de pyenv

Es posible utilizarpienvpara instalar y cambiar entre múltiples versiones de Python, lo cual es útil cuando se intenta desarrollar y probar software dirigido a versiones de Python que no son solo las más recientes. Una de las dependencias de estas instalaciones de Python es readline, que se instala mediante brew.

El problema que he encontrado es que Brew periódicamente se encarga de instalar una nueva versión de readline. Aunque pueden estar presentes varias versiones de readline en el sistema, solo una de ellas tiene un enlace simbólico en /usr/local/opt/readline.

Si Brew actualiza a una nueva versión de readline, de repente Python comienza a escupir texto como ^[[Acuando intenta usar las teclas del cursor para editar líneas. Si luego intenta hacerlo explícitamente, import readlineverá un error como este:

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

Esta buscando /usr/local/opt/readline/lib/libreadline.7.dylib. El problema parece ser que cuando pyenv installse construyó Python, /usr/local/opt/readlinehabía un enlace simbólico /usr/local/Cellar/readline/7.0.5que contenía lib/libreadline.7.dylib. ¡Ese archivo todavía está presente! Pero ya no está disponible en esta ruta, ya que Brew actualizó el enlace simbólico para que apunte a la versión 8.

Puedo brew switch readline 7.0.5cambiarlos nuevamente y Python de pyenv funcionará nuevamente. Pero ahoracerveza caseraPython se descompone de forma muy parecida. ¿Existe alguna forma sensata de que estos coexistan?y no volver a romperse espontáneamente¿La próxima vez que Homebrew instale una nueva versión de readline?

Respuesta1

No encontré readline 7 en la /usr/local/opt/readline/lib/carpeta, pero solo encontré libreadline.8.0.dylib. Resolví el problema con esta solución.

https://superuser.com/a/1411220

Básicamente, sólo necesitas crear un enlace suave:

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

información relacionada