使用aptitude安装包时的多个Python版本

4 投票
4 回答
10566 浏览
提问于 2025-04-17 10:51

在一个实验室的电脑上,我不能随便改动东西,发现这里安装了多个版本的Python。

当我输入python --version时,看到的是2.7.1。

我通过“apt-get install numpy”安装了numpy,它显示安装成功,但当我尝试导入时却找不到。

我在电脑上搜索numpy,发现它在/usr/lib/python2.5/site-packages/numpy这个文件夹里。我猜这就是问题所在……apt-get把它安装到了2.5版本,而不是2.7。

我该怎么解决这个问题呢?有没有办法在安装时告诉apt-get我想用哪个Python版本?还是说我应该放弃aptitude,改用pip或者其他工具呢?

4 个回答

1

Apt和dpkg是管理Debian系统上多个Python版本的一种方式(我记得叫做python-support)。你安装的任何额外包,比如numpy,都会自动为所有支持这个包的Python版本构建并提供使用。而且这些版本都是通过dpkg安装的。因为numpy支持所有的Python版本,所以你的信息告诉我,你的系统上唯一的Debian Python包是2.5,而你在PATH中看到的2.7可能是在/usr/local目录下。安装numpy包时,它并不知道你本地安装的2.7版本。你可以随时使用easy_install来解决这个问题。

使用virtualenv的建议很好。我有一个生产系统在用Python 2.5,但这个版本已经在Debian不再更新了;virtualenv让你可以使用任何你需要的版本。由于很多工具都需要Python,所以最好让系统的Python保持Debian想要的样子。

3

安装Python模块的一个好方法就是用pip这个工具。

使用这个工具,你可以通过命令来安装一个包(记得是在终端里输入,而不是在Python的命令行里)。

pip install <包名>

(需要有管理员权限)

它会自动处理依赖关系,也就是帮你解决包之间的相互依赖问题。

处理多个Python版本:

我不知道这是不是标准做法,但我通常是这样做的。

如果我想在比如说2.5版本上安装一个包,我会这样做:

python2.5 /usr/bin/pip install <包名>

在Ubuntu系统中,默认会有多个Python版本可用(比如2.4、2.6、2.7、3.2等等)。

如果你不想在Python2.7上安装numpy(我觉得你应该安装 :)),而是想用Python2.5的话,你可以通过启动Python2.5来使用numpy。


    $python2.5

    >>> import numpy
    >>>

编辑:

如果你使用apt-get install命令,包会被安装到系统默认的Python版本上。

4

如果你想在一台电脑上使用多个版本的Python,可以了解一下virtualenv这个工具。

virtualenv是一个用来创建独立Python环境的工具。

它主要解决的问题是关于依赖和版本的,间接地也涉及到权限。想象一下,你有一个应用需要LibFoo的1.0版本,但另一个应用却需要2.0版本。那你该怎么同时使用这两个应用呢?如果你把所有东西都安装到/usr/lib/python2.7/site-packages(或者你平台的标准位置),很容易就会不小心升级一个不该升级的应用。

更一般来说,如果你想安装一个应用并保持它不变呢?如果一个应用能正常工作,任何对它的库或库的版本的更改都有可能导致这个应用出问题。

还有,如果你不能把包安装到全局的site-packages目录呢?比如在一个共享主机上。

在这些情况下,virtualenv就能帮上忙。它会创建一个有自己安装目录的环境,不会和其他virtualenv环境共享库(而且可以选择不访问全局安装的库)。

这里有一个类似解决方案的问题

另外,我还使用virtualenvwrapper,因为我觉得它让管理多个环境变得更简单。

撰写回答