我最近在Mac上安装了许多点文件以及其他一些应用程序(我改为使用iTerm代替Terminal,将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时,会为安装了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,virtualenv中的符号链接指向不再存在的路径(因为Homebrew删除了它们)。
brew cleanup
符号链接需要指向新安装的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:
find
gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete
find如果尚未安装GNU,请使用Homebrew进行安装:
brew install findutils
请注意,默认情况下,随Homebrew一起安装的GNU程序通常以字母开头g。这是为了避免遮盖findOS X附带的二进制文件。
g