使用不同版本的 Python

Ale*_*lex 21 linux python software-installation

背景

由于我开发的python程序必须在不同的python版本上运行,所以我在我的电脑上安装了不同版本的python。

我使用的是 FC 13,所以它预装了 python 2.6/usr/bin/python2.6/usr/lib/python2.6.

我安装源蟒蛇2.5,并且让事情变得整齐,我用的--prefix=/usr选项,这在安装蟒蛇/usr/bin/python2.5/usr/lib/python2.5

现在,当我运行python提示时,我使用的是 2.5 版。但是,我在安装时遇到了一些问题。

包管理

使用 easy_install,包总是安装在/usr/lib/python2.6/site-packages/. 我setuptools为 python 2.5下载了.egg 并尝试安装它,但它给了我一个错误:

/usr/lib/python2.5/site-packages does NOT support .pth files
Run Code Online (Sandbox Code Playgroud)

似乎 python2.5 不在我的 PYTHONPATH 中。我认为默认安装会将自己添加到 PYTHONPATH,但是当我echo $PYTHONPATH在 promt写入时,我只收到一个空行。

VPe*_*ric 20

安装多个 Python 版本的推荐方法是从源代码安装每个版本 - 它们将愉快地共存。然后,您可以使用带有适当解释器的 virtualenv 来安装所需的依赖项(使用 pip 或 easy_install)。从源代码更轻松地安装多个解释器的技巧是使用:

sudo make altinstall
Run Code Online (Sandbox Code Playgroud)

而不是更常见的“sudo make install”。这会将版本号添加到可执行文件中(因此您将拥有 python-2.5、python-2.6、python-3.2 等),从而防止与 Python 的系统版本发生任何冲突。

  • Altinstall + virtualenv = python 开发必杀技。谢谢! (2认同)

Ada*_*tek 13

这听起来像是virtualenv的完美应用,这是一种非常流行的用于创建隔离 Python 环境的工具。这是一个指定 Python 版本的示例命令

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Run Code Online (Sandbox Code Playgroud)


Pio*_*ost 5

使用easy_install,软件包总是安装在 /usr/lib/python2.6/site-packages/

那是因为 distutils 向所有正在安装的脚本添加了 shebang 行。如果您easy_install直接运行脚本,它将使用安装它的解释器执行(根据 shebang 行)。easy_install正在运行哪个取决于您的PATHnot PYTHONPATH。如果要在 Python 2.5 实例中安装包,则应运行easy_install指定要使用的 Python 解释器:

/usr/bin/python2.5/python easy_install ...
Run Code Online (Sandbox Code Playgroud)

严格来说virtualenv在这里没有帮助,因为它必须在基本Python的上下文中创建,这与运行easy_install. 这就是--python论证的virtualenv目的。由于某种原因easy_install,没有提供类似的参数,因此它必须使用特定的 Python 解释器运行,如上所示。