1. ホーム
  2. パイソン

[解決済み】Virtualenvsの壊れたリファレンス

2022-04-01 09:18:23

質問

最近、他のアプリケーションと一緒にドットファイルをたくさんMacにインストールしたのですが(ターミナルではなくiTermに変更し、デフォルトのテキストエディタとしてSublimeを使用)、それ以来、すべての仮想環境が動作しなくなりました。.virtualenvs内のフォルダはまだ残っていて、その中で何かを実行しようとすると次のエラーが表示されます。

dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
  Reason: image not found
Trace/BPT trap: 5

dotfilesに関連するファイルをすべて削除し、.bash_profileを以前の状態に戻したのですが、問題は解決しません。この問題を診断したり、簡単な方法で解決する方法はないでしょうか(例えば、すべてのvirtualenvをもう一度作成する必要がないなど)?

解決方法を教えてください。

問題の解決策を見つけました こちら というわけで、すべての功績は著者にあります。

要は、virtualenvを作成すると、HomebrewでインストールしたPythonにたくさんのシンボリックリンクが作成されるということです。

以下はその一例です。

$ ls -la ~/.virtualenvs/my-virtual-env
...
lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.7/Frameworks/Python.framework/Versions/2.7/Python
...

Homebrew を使って Python をアップグレードし、その後 brew cleanup 仮想環境内のシンボリックリンクは、もはや存在しないパスを指しています (Homebrewがそれらを削除したため)。

シンボリックリンクは、新しくインストールされたPythonを指す必要があります。

lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/Python

解決策は、virtualenvのシンボリックリンクを削除してから、再作成することです。

find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env

削除する前に、まずどのようなリンクが削除されるかを確認したほうがよさそうです。

find ~/.virtualenvs/my-virtual-env/ -type l

私見では、壊れたシンボルリンクだけを削除するのがより良いと思います。これを行うには、GNU find :

gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete

GNUをインストールすることができます。 find をお持ちでない場合は、Homebrew でインストールしてください。

brew install findutils

デフォルトでは、HomebrewでインストールされたGNUプログラムには、接頭辞として g . の影を作らないようにするためです。 find のバイナリがOS Xに同梱されています。