首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Virtualenvs中损坏的引用

Virtualenvs中损坏的引用
EN

Stack Overflow用户
提问于 2014-04-23 09:30:10
回答 21查看 113K关注 0票数 249

我最近在我的苹果电脑上安装了一堆点文件和其他一些应用程序(我改用iTerm而不是终端,Sublime作为我的默认文本编辑器),但从那以后,我所有的虚拟环境都停止了工作,尽管它们在.virtualenvs中的文件夹仍然存在,每当我试图在其中运行任何东西时,它们都会显示以下错误:

代码语言:javascript
复制
dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
  Reason: image not found
Trace/BPT trap: 5

我已经删除了所有与点文件相关的文件,并将我的.bash_profile恢复到以前的状态,但问题仍然存在。有没有办法诊断问题或以简单的方式解决它(例如,不需要重新创建所有的virtualenv)?

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2014-09-20 17:31:04

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

要点是,当您创建一个virtualenv时,会创建许多指向Homebrew安装的Python的符号链接。

这里有一个例子:

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
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中的符号链接,然后重新创建它们:

代码语言:javascript
复制
find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env

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

代码语言:javascript
复制
find ~/.virtualenvs/my-virtual-env/ -type l

在我看来,只删除断开的符号链接会更好。您可以使用GNU find来实现这一点。

代码语言:javascript
复制
gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete

如果你还没有GNU find,你可以在Homebrew中安装它:

代码语言:javascript
复制
brew install findutils

请注意,默认情况下,与Homebrew一起安装的GNU程序倾向于以字母g作为前缀。这是为了避免遮蔽OS附带的find二进制文件。

票数 386
EN

Stack Overflow用户

发布于 2015-04-30 22:02:11

在尝试了一些方法之后,这对我很有效:

转到您的virtualenv目录(但不要运行workon):

代码语言:javascript
复制
cd ~/.virtualenv/name_of_broken_venv

现在删除这些文件:

代码语言:javascript
复制
rm -rf .Python bin/python* lib/python2.7/* include/python2.7

然后,要重新构建venv,运行:

代码语言:javascript
复制
virtualenv .
workon name_of_broken_venv
pip freeze

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

票数 43
EN

Stack Overflow用户

发布于 2016-06-30 10:58:08

更新版本@Chris Wedgwood对保留site-packages (保留已安装的软件包)的回答

代码语言:javascript
复制
cd ~/.virtualenv/name_of_broken_venv


mv lib/python2.7/site-packages ./    
rm -rf .Python bin lib include
virtualenv .
rm -rf lib/python2.7/site-packages
mv ./site-packages lib/python2.7/
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23233252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档