使用不同版本的Python


21

背景

由于我开发了必须在不同python版本上运行的python程序,因此我在计算机上安装了不同版本的python。

我正在使用FC 13,因此它在/usr/bin/python2.6和中预装了python 2.6 /usr/lib/python2.6

我从源代码安装了python 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

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

Answers:


20

建议安装多个Python版本的方法是从源代码安装每个版本-它们会愉快地共存。然后,您可以将virtualenv与相应的解释器一起使用以安装所需的依赖项(使用pip或easy_install)。从源代码更轻松地安装多个解释器的诀窍是使用:

sudo make altinstall

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


2
Altinstall + virtualenv = python开发的必杀技。谢谢!
亚历克斯(Alex)

13

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

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv

我不认为virtualenv这种情况下的解决方案。看我的答案。
Piotr Dobrogost 2012年

5

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

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

/usr/bin/python2.5/python easy_install ...

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


这是我的第一个答案,我也希望第一个死灵法师徽章:)
Piotr Dobrogost 2012年

很好的解释,谢谢!死灵法师徽章获得好评;)
亚历克斯(Alex

2

我也在使用Fedora 13,PYTHONPATH但未设置。

在python中,sys.path将为您提供用于导入脚本的路径列表。

我不熟悉如何easy_install确定其目标目录,但是我敢肯定您可以给它一个命令行参数。

尝试easy_install在命令前加上所需python的完整路径,以指定要在哪个python版本下运行。

还要检查easy_installbin中是否有符号链接到您已安装的一个python版本中的脚本。


1

Virtualenv在这里绝对是天赐之物。

在我的设置中,我将环境变量VIRTUALENV_USE_DISTRIBUTE设置为1,因此使用了更现代的Distribute包代替setuptools。我为系统上的两个Python版本创建了虚拟环境,如下所示:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

然后,我在中创建了三个别名.bashrc

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

因此,我可以py2用来切换到默认的Python 2.6和py3切换到默认的Python 3.2。进入idle将运行适合我所在的虚拟环境的任何版本的IDLE。

将软件包安装到这些虚拟环境之一中通常仅涉及一个pip install命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.