4

在我不能随便乱搞的实验室机器上,似乎安装了不止一个版本的 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

4 回答 4

4

如果你想在一台机器上使用多个版本的 python,你应该研究virtualenv

virtualenv 是一个创建隔离 Python 环境的工具。

正在解决的基本问题是依赖关系和版本之一,以及间接权限。想象一下,您有一个应用程序需要 LibFoo 版本 1,但另一个应用程序需要版本 2。您如何同时使用这两个应用程序?如果您将所有内容都安装到 /usr/lib/python2.7/site-packages(或任何您平台的标准位置)中,很容易导致您无意中升级了不应升级的应用程序。

或者更一般地说,如果你想安装一个应用程序并让它保持不变怎么办?如果应用程序正常工作,其库或这些库版本的任何更改都可能破坏应用程序。

另外,如果你不能将包安装到全局站点包目录中怎么办?例如,在共享主机上。

在所有这些情况下,virtualenv 都可以帮助您。它创建了一个具有自己的安装目录的环境,它不与其他 virtualenv 环境共享库(并且可选地也不访问全局安装的库)。

这是一个具有类似解决方案的问题。

此外,我使用virtualenvwrapper是因为我发现它使管理多个环境变得更加容易。

于 2012-01-22T21:28:05.097 回答
3

安装 python 模块的一个好的、标准和简单的方法是pip

用这个你安装一个带有命令的包(在终端而不是在 python shell 中)

pip install <packagename>

(具有root权限)

它处理依赖关系。

处理多个版本的python:

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

要在我说的版本 2.5 上安装软件包,

python2.5 /usr/bin/pip install <packagename>

默认情况下,Ubuntu 有多个可用的 python 版本(例如 2.4、2.6、2.7、3.2 等)

在您的情况下,如果您不想在 python2.7 上安装 numpy(您应该 IMO :))并且您可以使用 python2.5,您可以通过启动 python2.5 来使用 numpy

    $python2.5

    >>> 导入 numpy
    >>>

编辑:

如果您使用apt-get install,该软件包将安装在系统默认的 python 版本上。

于 2012-01-22T21:34:11.200 回答
1

Apt/dpkg 有一种 Debian 方式来管理多个已安装的 Python 版本(我相信它被称为 python-support)。您安装的任何额外包(如 numpy)都将自动构建并可用于该包支持并由 dpkg 安装的所有 Python 版本。由于 numpy 支持所有 Python,因此您的信息告诉我,您系统上唯一的 Debian python 包是 2.5,而 PATH 中的 2.7 可能在 /usr/local 中。当您安装 numpy 包时,它不知道本地构建的 2.7。您可以随时轻松安装。

使用 virtualenv 的建议是一个很好的建议。我有一个使用 python 2.5 支持的生产系统,该系统已从 debian 不稳定版中删除;virtualenv 可以使用您需要的任何版本。既然如此多的工具都需要 python,那么最好将系统 python 留在 Debian 想要的任何位置。

于 2012-01-23T02:12:50.507 回答
0

Debian 允许安装多个 Python(python2.5python2.6包)。包中的 numpy 之类的 Python 库python-numpy可以支持其中的多个,但通过包管理器安装的特定库不一定支持所有这些库。您可以使用apt-cache show python-numpy | grep Python-Version查看支持的版本。如果不支持 2.7,则必须从源代码或(例如)pip、easy_install 等进行安装。

但是,您可能在本地安装了 Python 2.7(从 repos 之外的源编译和安装)。您的发行版听起来有点过时(在 Linux Mint 12 上,numpy 仅支持 2.6 和 2.7),因此可能没有 Python 2.7 的官方软件包。如果您这样做which python并且它位于/usr/local或以外的任何地方/usr/bin,那么您已经进行了本地安装,您将需要使用 source 或 easy_install 和朋友安装包。

也就是说,我的观点是,如果您只需要这些库进行开发,您应该将它们保存virtualenv在您的主目录中的沙箱(如 )中。这样您就可以更好地控制您拥有的确切版本。

于 2012-01-23T18:20:01.230 回答