virtualenv python在将ubuntu 15.10升级到16.04后破了

时间:2016-04-22 14:45:43

标签: python ubuntu virtualenv

我的virtualenv中有python 3.4,但是在升级ubuntu到16.04后python升级到3.5所以在virtualenv中的python崩溃了这些错误:

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)

我该如何解决?

5 个答案:

答案 0 :(得分:4)

我通过安装最小工作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在这里:〜/ virtualenv / example

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

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

摆脱python3.4,返回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

答案 1 :(得分:1)

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

PS :抱歉我的英语不好。

答案 2 :(得分:1)

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

<强>问题: 首先,据我所知,问题出现是因为在升级到Ubuntu 16.04后,之前版本的Python也会升级。因此,任何Python3环境中的符号链接都不再起作用。

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

解决方案2:这就是我今天尝试过的,它运行正常。我决定尝试pyenv + pyenv-virtualenv的组合,而不是使用virtualenv + virtualenvwrapper。

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

  

Pyenv实际上复制了整个Python   每次创建新的pyenv版本时安装。相反,   virtualenv利用符号链接来减小大小   的virtualenv的。

<强> HOWTO:

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

答案 3 :(得分:0)

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

创建一个新的virtualenv:

virtualenv <new-virtualenv>

激活它:

source <new-virtualenv>/bin/activate

安装软件包:

pip install <required-packages>

我很高兴再次去!

只需重命名文件夹即可保留旧的virtualenv:

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

答案 4 :(得分:0)

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