我最近在我的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)?


当前回答

virtualenvwrapper指令

正如已接受的答案所示,根本原因可能是一个自制更新,这意味着您的virtualenv符号链接指向损坏的python路径-请参阅这里的详细信息。

对于每个虚拟env,您需要重新分配符号链接以指向正确的python路径(在酿造窖中)。下面是如何使用virtualenvwrapper来做到这一点。这里我正在更新一个名为“my-example-env”的虚拟环境。

cd ~/PYTHON_ENVS
find ./my-example-env -type l -delete
mkvirtualenv my-example-env

全部完成。

其他回答

使用Python 2.7.10。

一个命令virtualenv path-to-env就可以做到这一点。文档

$ virtualenv path-to-env
Overwriting path-to-env/lib/python2.7/orig-prefix.txt with new content
New python executable in path-to-env/bin/python2.7
Also creating executable in path-to-env/bin/python
Installing setuptools, pip, wheel...done.

这发生在我从雪豹更新到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

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

在尝试了一些事情之后,这对我来说很有效:

进入你的virtualenv目录(但不要运行workon):

cd ~/.virtualenv/name_of_broken_venv

现在删除这些文件:

rm -rf .Python bin/python* lib/python2.7/* include/python2.7

然后重新构建venv,运行:

virtualenv .
workon name_of_broken_venv
pip freeze

现在您应该再次看到已安装包的列表。

任何正在使用pipenv的人(你应该这样做!)都可以简单地使用这两个命令——而不需要激活venv:

rm -rf `pipenv --venv` # remove the broken venv
pipenv install --dev   # reinstall the venv from pipfile 

我有一个类似的问题,我解决了它只是重建虚拟环境与virtualenv。