【问题标题】:Homebrew broken link to Python in a virtualenv自制软件在 virtualenv 中断开了与 Python 的链接
【发布时间】:2014-11-19 23:17:42
【问题描述】:

我最近运行 (OS X 10.6.8) brew updatebrew upgrade 并在一个现在失败的 virtualenv 中工作。我试过了:

$ brew unlink python && brew link python
Unlinking /usr/local/Cellar/python/2.7.8_1... 38 symlinks removed
Linking /usr/local/Cellar/python/2.7.8_1... 35 symlinks created

但在 virtualenv 中,我仍然得到这个:

$ python --version
dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/admin/.virtualenvs/saves/bin/python
  Reason: image not found
Trace/BPT trap

我找到了另一篇关于此的帖子,但解决方案似乎仍不清楚。我很着急,所以卸载了 Python 版本并运行了brew doctor,它返回了上面的错误作为警告:

sh: line 1: 40991 Trace/BPT trap          python -V 2>&1

然后brew install python。在 virtualenv 中仍然出现上述错误。

相关问题和关于调试修复的帖子不是确定的:

Broken references in Virtualenvs
dyld-library-loaded-executable_path-python

更新

创建一个新的 virtualenv 解决了这个特定的问题。

【问题讨论】:

  • 您的问题并没有说明您是否尝试创建新的虚拟环境,以及是否失败。正如您提供的第二个链接中所建议的那样,可能使用pip freeze
  • 在完成上述所有操作之后,我确实最终创建了一个新的 virtualenv,这解决了问题。 brew 升级后旧的 virtualenv 坏了。现在因为我正在运行的 Pyramid 应用程序的依赖项需要系统本身上的 Fortran,所以我还有其他问题,第一次解决需要很长时间:-(
  • 相关链接确切地告诉了你:因为 virtualenv 创建了指向文件的符号链接,并且 homebrew 在使用不同命名的文件升级时替换了这些文件,你最终会得到断开的链接。两个链接都给出了解决这个问题的建议:一个是创建一个新的 virtualenv,另一个是修复损坏的链接。总而言之,当 Python 在 homebrew 中再次升级时,你可能会遇到同样的情况。

标签: python virtualenv homebrew


【解决方案1】:

我会将我的评论作为答案,以便将来遇到相同问题的访问者清楚。

您提供的相关链接确切地告诉您问题出在哪里:因为 virtualenv 创建了指向文件的符号链接,并且 homebrew 在使用不同名称的文件进行升级时替换了这些文件,所以您最终会得到断开的链接。 两个相关链接都给出了解决该问题的建议:一个是创建新的 virtualenv,另一个是修复损坏的链接。

总而言之,当 Python 在 homebrew 中再次升级时,您可能会遇到同样的情况。

这显然是realised by the virtualenv developers,并且有一个选项--always-copy 可以避免这样的问题:

$ virtualenv --help
Usage: virtualenv-3.4 [OPTIONS] DEST_DIR

Options:
  ...

  --always-copy         Always copy files rather than symlinking.

  ...

这应该可以防止将来通过 Homebrew 升级 Python 时出现问题。当然,尽管如此,您的 virtualenv 将拥有旧版本的 Python。这有时可能正是您想要的。

【讨论】:

  • 感谢您为未来的用户隔离重要信息。在尝试此操作之前,我已经重新创建了我的 virtualenv(出于其他原因使用站点包)。
  • 如何在 PyCharm 中使用这个标志?
【解决方案2】:

使用这样的东西:

find <virtualenv> -type l -delete
virtualenv -p $(which python3) <virtualenv>

所有符号链接都已损坏,因此有必要删除它们。当您重新创建 virtualenv 时,它会重新创建符号链接,同时保留已安装的包。

注意:将 $(which python3) 替换为您要使用的任何 python 版本的位置。

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2017-07-16
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多