python - Virtualenvs 中损坏的引用

标签 python macos virtualenv homebrew dyld

我最近在我的 Mac 上安装了一堆 dotfiles 以及其他一些应用程序(我改为 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 恢复为之前的状态,但问题仍然存在。有什么方法可以诊断问题或以简单的方式解决问题(例如,不需要重新创建所有虚拟环境)?

最佳答案

我找到了问题的解决方案here ,因此所有功劳归作者所有。

要点是,当您创建 virtualenv 时,会创建许多符号链接(symbolic link)到 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 中的符号链接(symbolic link)指向不再存在的路径(因为 Homebrew 删除了它们)。

符号链接(symbolic link)需要指向新安装的 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 中的符号链接(symbolic link),然后重新创建它们:

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

最好在删除链接之前先检查一下哪些链接会被删除:

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

在我看来,最好只删除损坏的符号链接(symbolic link)。您可以使用 GNU find 来做到这一点:

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

如果您还没有 Homebrew,您可以使用 Homebrew 安装 GNU find:

brew install findutils

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

关于python - Virtualenvs 中损坏的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233252/

相关文章:

python - 使用双回车将大文本文件分成单独的文件

macos - Mac OS : ld: in section __DATA, __data reloc 0:长度 < 2 和 X86_64_RELOC_UNSIGNED 不受支持

python - 如何让 emacs-jedi 使用项目特定的 virtualenvs

python - 在 virtualenv 中使用 pip 时如何避免 "Permission denied"

python - 获取Python中列表的最小N个元素的索引

python - pycharm使用pyside2类型错误: 'NoneType' object is not callable

python - Django 图像字段 "Upload a valid image. The file you uploaded was either not an image or a corrupted image."

macos - 显示 TStringGrid 单元格的工具提示

cocoa - 准备 Mac 应用程序以上传到 App Store

python - 如何安装 django-utils?