Impedir que o Homebrew interrompa as instalações do pyenv

Impedir que o Homebrew interrompa as instalações do pyenv

É possível usarpyenvpara instalar e alternar entre várias versões do Python, o que é útil ao tentar desenvolver e testar software direcionado a versões do Python que não são apenas as mais recentes. Uma das dependências dessas instalações do Python é o readline, que é instalado pelo brew.

O problema que descobri é que o brew periodicamente se encarrega de instalar uma nova versão do readline. Embora múltiplas versões do readline possam estar presentes no sistema, apenas uma delas tem link simbólico em /usr/local/opt/readline.

Se o brew for atualizado para uma nova versão do readline, de repente o Python começa a cuspir texto, como ^[[Aao tentar usar as teclas do cursor para editar a linha. Se você tentar explicitamente, import readlineverá um erro 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

Está procurando /usr/local/opt/readline/lib/libreadline.7.dylib. O problema parece ser que, quando pyenv installconstruído em Python, /usr/local/opt/readlinehavia um link simbólico /usr/local/Cellar/readline/7.0.5que continha lib/libreadline.7.dylib. Esse arquivo ainda está presente! Mas não está mais disponível neste caminho, pois o brew atualizou o link simbólico para apontar para a versão 8.

Posso brew switch readline 7.0.5trocá-los novamente e o Python do pyenv funcionará novamente. Mas agoraCervejaria caseiraPython é quebrado da mesma maneira. Existe alguma maneira sensata de fazer com que estes coexistame não quebrar espontaneamente novamentena próxima vez que o Homebrew instalar uma nova versão do readline?

Responder1

Não encontrei o readline 7 na /usr/local/opt/readline/lib/pasta, mas só encontrei o arquivo libreadline.8.0.dylib. Resolvi o problema com esta solução.

https://superuser.com/a/1411220

Basicamente, você só precisa criar um link virtual:

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

informação relacionada