Homebrew在virtualenv中断开了与Python的链接

时间:2014-09-25 08:48:37

标签: python virtualenv homebrew

我最近跑了(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中得到上述错误。

相关问题和关于debugfix的帖子不是明确的:

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

更新

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

2 个答案:

答案 0 :(得分:14)

我会将我的评论作为答案,以便明确解决同样问题的未来访问者。

您提供的相关链接会告诉您究竟是什么问题:因为virtualenv创建了文件的符号链接,并且在使用不同命名的文件进行升级时,自制软件会替换这些文件,最终会导致链接断开。 这两个相关链接都提供了如何解决这个问题的建议:一个用于创建新的virtualenv,另一个用于修复损坏的链接。

总而言之,当Python再次以自制软件升级时,您可能会遇到相同的情况。

这显然是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。这有时可能正是你想要的。

答案 1 :(得分:1)

使用类似这样的内容:

$(which python3)

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

注意:将{{1}}替换为您要使用的任何python版本的位置。