虚拟环境中的引用损坏

251

我最近在我的 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还原为之前的状态,但问题仍然存在。有没有办法诊断问题或以简单的方式解决它(例如,不需要重新创建所有虚拟环境)?


1
可能相关:http://debugfix.com/2011/11/dyld-library-loaded-executable_path-python/ - unutbu
感谢您的评论,@unubtu。这确实很有帮助。但是我也无法创建任何新的虚拟环境。我的 rmvirtualenv 仍然有效,但是当尝试运行 mkvirtualenv 时,我会收到以下错误:`-bash: /usr/local/bin/virtualenv: /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resour: bad interpreter: No such file or directory`因此,似乎存在我的 Python 路径问题,但我看不到问题所在,因为我可以运行 Python,而且它似乎很正常。 - oxtay
1
[更新] 我可能已经找到了问题,但我不确定该如何解决。理论上,所有的 virtualenv 命令都可以工作,但由于 Python 存在问题,它们并没有起到任何作用。所以真正的问题在于 brew 的 Python。我怀疑原因是 Python 目录名称的更改。由于某种原因,所有这些命令都在寻找 /usr/local/Cellar/python/2.7.6 文件夹中的 Python,但实际上文件夹的名称是 /usr/local/Cellar/python/2.7.6_1 - oxtay
由于我是个新手,我不知道手动将名称从2.7.6_1更改为2.7.6会有多大的风险,也不知道会发生什么。 - oxtay
不幸的是,损坏的链接对我没有起作用。通过@oxtay的解决方案,我能够解决“错误的解释器”问题,方法是创建一个名为/usr/local/Cellar/python/2.7.6的新目录(mkdir),并将/usr/local/Cellar/python/2.7.9中的所有文件复制(cp -r)到该文件夹中。我太紧张了,不敢只是重命名文件夹! - Patrick Williams
显示剩余2条评论
26个回答

0

当我在我的Mac上将Python运行时从2更改为3时,我遇到了同样的问题,即将别名python指向Python 3路径。然后,我重新创建了一个新的虚拟环境,并重新安装了我需要的那些软件包。对于我的用例,我有一个Python程序写入Google表格。清理一些与Python 2实现不同的软件包,然后,事情又开始正常工作了。


0

有很多种方法,但我使用的是以下方法,因为我已经有了我的 requirements.txt 文件。

使用以下命令删除旧的虚拟环境: deactivate cd .. rm -r old_virtual_environment

要使用 pip 安装 virtualenv python 包,请使用: pip install virtualenv

然后检查是否正确安装 使用 virtualenv --version

跳转到项目目录 使用 cd project_directory

现在在项目目录中创建新的虚拟环境,使用以下命令: 使用 virtualenv name_of_new_virtual_environment

现在激活新创建的虚拟环境 使用 source name_of_new_virtual_environment/bin/activate

现在使用以下命令安装所有项目依赖项 使用 pip install -r requirements.txt


0

这里的所有答案都很好,我尝试了Ryan和Chris上面提到的几种解决方案,但无法解决问题,所以不得不采用一种快速而肮脏的方法。

  1. rm -rf <project dir>(或者mv <project dir> <backup projct dir>如果您想保留备份)
  2. git clone <project git url>
  3. 继续前进!

没有什么新奇的东西,但它使生活更轻松!


0

0

对我来说解决问题的方法就是卸载Python3和Pipenv,然后重新安装它们。

brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv

0

我确定我来晚了,但我想说解决这个问题的方法比在这里讨论的简单得多。

您可以轻松地重新生成虚拟环境,而无需删除/编辑任何内容。假设你的损坏的环境被称为env_to_fix,你只需要执行以下操作:

mkvirtualenv env_to_fix

这将重新生成链接并修复环境,无需将当前状态转储到其他地方并恢复它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接