使用可能pyenv複数の Python バージョンをインストールして切り替えることができます。これは、最新ではないバージョンの Python を対象としたソフトウェアの開発とテストを行う場合に役立ちます。これらの Python インストールの依存関係の 1 つは、brew によってインストールされる readline です。
私が見つけた問題は、brew が定期的に新しいバージョンの readline をインストールすることです。システムには複数のバージョンの readline が存在する可能性がありますが、/usr/local/opt/readline にシンボリックリンクされているのはそのうちの 1 つだけです。
^[[A
brew が readline の新しいバージョンにアップグレードすると、突然 Python がカーソル キーを使用して行編集しようとしたときのようにテキストを吐き出し始めます。その後明示的に試みると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
を探しています。問題は、Python をビルドしたときに、へのシンボリックリンクがあり、が含まれていたこと/usr/local/opt/readline/lib/libreadline.7.dylib
にあるようです。そのファイルはまだ存在しています。ただし、brew がシンボリックリンクをバージョン 8 を指すように更新したため、このパスでは利用できなくなりました。pyenv install
/usr/local/opt/readline
/usr/local/Cellar/readline/7.0.5
lib/libreadline.7.dylib
できますbrew switch readline 7.0.5
これらを再度入れ替えると、pyenvのPythonが再び動作するようになります。しかし、今自家製ビールPythonも同じように壊れています。これらを共存させる賢明な方法はあるでしょうか?そして再び自然に壊れることはない次回 Homebrew が readline の新しいバージョンをインストールするときはどうなりますか?
答え1
フォルダー内に readline 7 が見つからず/usr/local/opt/readline/lib/
、 だけが見つかりましたlibreadline.8.0.dylib
。この解決策で問題を解決しました。
基本的には、ソフト リンクを作成するだけです。
sudo ln -s libreadline.8.0.dylib libreadline.7.dylib