12.04 LTS:升级到 Python3.4 会破坏 pip、easy_install 和 virtualenv

12.04 LTS:升级到 Python3.4 会破坏 pip、easy_install 和 virtualenv

因此,经过许多烦恼和心痛之后,我设法将 Ubuntu 12.04 LTS 上的 Python3.2 升级到 Python3.4。我遵循了这个相当简单的方法:

http://ubuntuhandbook.org/index.php/2014/05/install-python-3-3-5-or-3-4-via-ppa-in-ubuntu-14-04-12-04/

似乎解决了这个问题,运行“python”作为命令会将我带入 Python3.4 shell 而不是旧版本。太好了。

只是现在我遇到了一些问题。我想换到 3.4 的原因是为了获得 Python mysql.connector 的较新版本,即 2.0.0 或更高版本,这需要 3.4。但是在我安装 3.4 之后,我的 easy_install、pip 和 virtualenv(可能还有很多其他的)都坏了,而且看起来似乎是某种版本问题。以下是一些错误输出:

pip

(without typing out the whole thing, heres the last two lines)
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve 
 raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==7.1.0


easy_install

File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve
 raise raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: distribute==0.06.24dev-r0


virtualenv

File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve
 raise raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: virtualenv==13.1.0

有人知道为什么会发生这种情况吗?你能指导我解决吗?

谢谢!

答案1

本教程的结尾是真的不好。内容如下:

rm /usr/local/bin/python  
ln -s /usr/local/bin/python3.3 /usr/local/bin/python

这意味着全球的系统 Python 已更改为 3.3。根据我之前的评论,这将造成比破坏您的开发环境更大的损害。Python 2 和 3 不兼容,并且它们具有不同的依赖项位置(也不兼容)。Ubuntu 在系统方面使用了很多 Python。这会破坏 Ubuntu。

因此首先删除该符号链接:

sudo rm /usr/local/bin/python

然后仔细检查which pythonpython返回一些合理的结果。您正在寻找到 2.whatever 的映射。

为了实现您真正想要的功能,您需要使用 virtualenv/venv。这会将您想要的任何版本的 Python 复制到一个特殊环境中。您“激活”此环境,它会更改您的运行时PATH以查找您在构建 venv 时使用的 Python 版本。

python3 -m venv venv
. venv/bin/activate  # activates it
which python  # should return /path/to/venv/bin/python

如果您在运行 venv 模块时遇到问题ensurepip(14.04 上的已知问题可能不会影响您),我使用的修复方法

wget -qO- http://d.pr/f/YqS5+ \
| sudo tar xzf - -C $(python3 -c "import sys; print(sys.path[1])") --no-same-owner

这是为 14.04 设计的,因此可能会破坏与 python3 相关的所有内容。

相关内容