我最近在我的Mac上安装了一堆dotfiles和其他一些应用程序(我把Terminal换成了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)?


当前回答

这发生在我从雪豹更新到Mac OS X Mavericks时。我必须事先重新安装brew。希望您使用pip为项目运行了冻结命令。

要解决这个问题,您必须更新虚拟环境所指向的路径。

使用brew安装一个python版本:

编译安装python

重新安装virtualenvwrapper。

PIP install——升级virtualenvwrapper

移除旧的虚拟环境:

rmvirtualenv old_project

创建一个新的虚拟环境:

mkvirtualenv new_project

在新的虚拟环境中工作

被new_project

使用pip来安装新项目的需求。

PIP install -r requirements.txt

这将使项目保持以前的状态。

其他回答

我(MacOS用户)的问题是,brew更新了Python和virtualenvs链接到旧版本,旧版本已被删除。

我们可以在

>> ls -al ~/.virtualenvs/<your-virtual-env>/.Python
.Python -> /usr/local/Cellar/python/<old-version>/Frameworks/Python.framework/Versions/3.7/Python
>> rm ~/.virtualenvs/<your-virtual-env>/.Python
>> ln -s  /usr/local/Cellar/python/<new-version>/Frameworks/Python.framework/Versions/3.7/Python ~/.virtualenvs/<your-virtual-env>/.Python

我在这里找到了这个问题的解决方案,所以所有的功劳都归于作者。

要点是,当您创建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删除了它们)。

符号链接需要指向新安装的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

如果你还没有,你可以在Homebrew中安装GNU find:

brew install findutils

注意,默认情况下,安装Homebrew的GNU程序倾向于以字母g作为前缀。这是为了避免遮蔽OS X附带的find二进制文件。

简单地升级python3对我来说很有效:

brew upgrade python3

这发生在我从雪豹更新到Mac OS X Mavericks时。我必须事先重新安装brew。希望您使用pip为项目运行了冻结命令。

要解决这个问题,您必须更新虚拟环境所指向的路径。

使用brew安装一个python版本:

编译安装python

重新安装virtualenvwrapper。

PIP install——升级virtualenvwrapper

移除旧的虚拟环境:

rmvirtualenv old_project

创建一个新的虚拟环境:

mkvirtualenv new_project

在新的虚拟环境中工作

被new_project

使用pip来安装新项目的需求。

PIP install -r requirements.txt

这将使项目保持以前的状态。

看来解决这个问题的正确方法是跑步

 pip install --upgrade virtualenv

在你用Homebrew升级python之后。

对于任何安装python之类的程序的公式来说,这应该是一个通用的过程,因为python有自己的包管理系统。当你安装brew install python时,你会安装python和pip以及easy_install和virtualenv等等。因此,如果这些工具可以自我更新,最好在将Homebrew视为问题的根源之前尝试这样做。