oxt*_*tay 205 python macos homebrew virtualenv 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
Run Code Online (Sandbox Code Playgroud)
我删除了与dotfiles相关的所有文件,并将我的.bash_profile恢复到以前的状态,但问题仍然存在.有没有办法诊断问题或以一种简单的方式解决问题(例如,不需要再次创建所有的virtualenvs)?
Rya*_*kel 332
我在这里找到了问题的解决方案,所以所有的功劳都归功于作者.
要点是,当您创建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
...
Run Code Online (Sandbox Code Playgroud)
当您使用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
Run Code Online (Sandbox Code Playgroud)
解决方案是删除virtualenv中的符号链接,然后重新创建它们:
find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env
Run Code Online (Sandbox Code Playgroud)
在删除之前,最好先检查哪些链接会被删除:
find ~/.virtualenvs/my-virtual-env/ -type l
Run Code Online (Sandbox Code Playgroud)
在我看来,只删除损坏的符号链接更好.您可以使用GNU执行此操作find:
gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete
Run Code Online (Sandbox Code Playgroud)
您可以find使用Homebrew 安装GNU ,如果您还没有它:
brew install findutils
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下,使用Homebrew安装的GNU程序往往以字母为前缀g.这是为了避免遮蔽findOS X附带的二进制文件.
小智 37
尝试了几件事后,这对我有用:
转到你的virtualenv目录(但不要运行workon):
cd ~/.virtualenv/name_of_broken_venv
Run Code Online (Sandbox Code Playgroud)
现在删除这些文件:
rm -rf .Python bin/python* lib/python2.7/* include/python2.7
Run Code Online (Sandbox Code Playgroud)
然后重建你的venv,运行:
virtualenv .
workon name_of_broken_venv
pip freeze
Run Code Online (Sandbox Code Playgroud)
您现在应该再次看到已安装软件包的列表.
Rob*_*ita 12
当我从Snow Leopard更新到Mac OS X Mavericks时发生了这种情况.我不得不事先重新安装brew.希望您使用pip为您的项目运行冻结命令.
要解决此问题,您必须更新虚拟环境指向的路径.
brew install python
pip install --upgrade virtualenvwrapper
rmvirtualenv old_project
mkvirtualenv new_project
workon new_project
pip install -r requirements.txt
这应该让项目保持原样.
看来解决此问题的正确方法是运行
pip install --upgrade virtualenv
Run Code Online (Sandbox Code Playgroud)
用Homebrew升级python之后。
对于任何安装了python之类的公式的用户,这应该是一个通用过程,该程序具有自己的软件包管理系统。当您安装brew install python,在安装python和pip和easy_install和virtualenv等。因此,如果这些工具可以自我更新,那么最好先尝试这样做,然后再将“自制”视为问题的根源。
@Chris Wedgwood保留更新版本的答案site-packages(保留已安装的软件包)
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/
Run Code Online (Sandbox Code Playgroud)
小智 5
任何使用pipelinenv的人(你应该!)都可以简单地使用这两个命令 \xe2\x80\x94 ,而无需激活 venv:
\n\nrm -rf `pipenv --venv` # remove the broken venv\npipenv install --dev # reinstall the venv from pipfile \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
74906 次 |
| 最近记录: |