virtualenv python 在将 ubuntu 15.10 升级到 16.04 后损坏

virtualenv python broke after upgrading ubuntu 15.10 to 16.04

我的 virtualenv 中有 python 3.4,但是在将 ubuntu 升级到 16.04 之后 python 升级到 3.5 所以 python 在 vi​​rtualenv 中崩溃并出现这些错误:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Current thread 0x00007f2f2dbcb700 (most recent call first):
fish: “python” terminated by signal SIGABRT (Abort)

我该如何解决?

我有同样的问题,我解决了重新创建整个 virtualenv

PS:抱歉我的英语不好。

我遇到了同样的问题,我设法 "fix" 是通过重新创建 virtualenv 并使用 pip 重新安装所需的包。

创建一个新的虚拟环境:

virtualenv <new-virtualenv>

激活它:

source <new-virtualenv>/bin/activate

安装软件包:

pip install <required-packages>

我很高兴再次出发!

您可以通过重命名文件夹来保留旧的 virtualenv:

mv <old-virtualenv> <old-virtualenv>-backup

我今天遇到了同样的问题,我就是这样解决的:

问题: 首先,据我了解,问题的发生是因为升级到 Ubuntu 16.04 后,之前的 Python 版本也升级了。因此,任何 Python3 环境中的符号链接都不再有效。

解决方案 1: 正如上面所写,简单的解决方案是删除所有 Python3 环境并重新创建它们。我不喜欢它,因为这是我升级后第二次这样做Ubuntu。也可能我需要在未来的项目中使用多个 Python 3 个版本。

解决方案 2: 这就是我今天尝试过的方法,效果很好。我决定尝试 pyenv + pyenv-virtualenv 的组合,而不是使用 virtualenv + virtualenvwrapper。

两种方法的主要区别在于:

Pyenv actually copies an entire Python installation every time you create a new pyenv version. In contrast, virtualenv makes use of symbolic links to decrease the size of the virtualenv’s.

方法:

  1. 按照 here 所述安装 pyenv 以及 Python 2 和 3 的所需版本。
  2. 看看 here 如何使用 pyenv 来处理 virtualenv。
  3. 创建新环境,使用 pip 安装所有依赖项,希望在下一次 Ubuntu 升级期间忘记符号链接损坏的问题。

我通过安装最小工作 python3.4 来解决这个问题,这样我的 virtualenv 就可以很好地获取软件包列表,然后用 python3.5 创建一个新的...如下:

获得python3.4 个最少的包:

wget http://launchpadlibrarian.net/221250032/python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
wget http://launchpadlibrarian.net/221250033/libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
sudo dpkg -i --force-breaks libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
sudo dpkg -i python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb

我的虚拟环境在这里:~/virtualenv/example

获取您的 virtualenv 中的包列表(现在应该可以正常工作,但可能无法正确执行其他操作):

source ~/virtualenv/example/bin/activate
pip freeze > /tmp/requirements.txt
deactivate 

去掉python3.4,到return到Ubuntu 16.04的首选状态:

sudo dpkg --purge python3.4-minimal
sudo dpkg --force-depends --purge libpython3.4-minimal

使用正确的包创建一个新的 virtualenv:

virtualenv -p python3.5 example
source ~/virtualenv/example/bin/activate
pip install -r /tmp/requirements.txt

现在应该可以使用所有旧软件包,但在 python3.5 中。应该...

另见 Upgrade python in a virtualenv

我通过创建一个新的 virtualenv 并将 python 可执行文件复制到旧的损坏的 virtualenv 来修复它。