Virtualenvs中的参考文献被破坏

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我最近在我的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恢复到之前的状态,但问题仍然存在。有什么方法可以诊断问题或以简单的方式解决问题(例如不需要重新创建所有virtualenvs)?

提问于
用户回答回答于

我在这里找到了解决问题的办法,因此所有功劳都归功于作者。

要点是,当你创建一个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

find如果您尚未拥有它,您可以使用Homebrew 安装GNU :

brew install findutils

请注意,默认情况下,安装了自制软件的GNU程序往往以字母为前缀g。这是为了避免遮蔽findOS X附带的二进制文件。

用户回答回答于

尝试了几件事后,这对我有效:

去你的virtualenv目录(但不要运行):

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

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

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 最爱开车啦

    8 粉丝503 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问5 回答

扫码关注云+社区

领取腾讯云代金券