3

我在将 python 从 2.4 升级到 2.6 时遇到问题:

我有 CentOS 5(完整版)。它在 /usr/lib/python2.4/ 中有 python 2.4。其他模块位于 /usr/lib/python2.4/site-packages/ 中。我已经从 /usr/local/lib/python2.6/ 的源代码构建了 python 2.6。我已将默认 python 设置为 python2.6 。现在 2.4 的旧模块不在 pythonpath 中并且“丢失”了。特别是 yum 坏了(“没有名为 yum 的模块”)。

那么将模块迁移/安装到python2.6的正确方法是什么?

4

4 回答 4

3

它们没有损坏,只是没有安装。解决方案是在 2.6 下安装它们。但首先我们应该看看你是否真的应该这样做......

是的,Python 在安装时会将 python 命令替换为已安装的版本(除非您使用 --alt-install 运行它)。你没有确切说明你的问题是什么,所以我会猜测。您的问题是许多使用 Python 的本地命令现在都失败了,因为它们是用 Python 2.6 执行的,而不是用 Python 2.4 执行的。那是对的吗?

如果是这样,那么只需删除 /usr/local/bin/python,并确保 /usr/bin/python 是指向 /usr/bin/python2.4 的符号链接。然后你必须输入 python2.6 来运行 python2,6,但这没关系。这是最好的方法。那么你只需要安装2.6中需要的包即可。

但是如果我的猜测是错误的,并且你真的需要在 2.6 下安装所有这些包,那么不要太担心。首先,安装setuptools。它包含一个 easy_install 脚本,然后您可以使用以下命令安装模块

easy_install <modulename>

它将从 pypi.python.org 下载模块并安装它。它还将安装任何作为依赖项的模块。easy_install 可以安装任何使用 distutils 作为安装程序的模块,而且很少有人不这样做。这将使安装这些模块中的 90% 变得轻而易举。

如果模块有 C 组件,它会编译它,然后你也需要库头文件,这将是更多的工作,你所能做的就是以标准的 CentOS 方式安装它们。

您不应该在版本之间使用符号链接,因为库通常用于特定版本。对于 2.4 和 2.6,我认为 .pyc 文件是兼容的(但我不是 100% 确定),所以这可能有效,但任何使用 C 的模块都会损坏。其他版本的 Python 也会有不兼容的 .pyc 文件。而且我敢肯定,如果你这样做,大多数 Python 人不会帮助你。;-)

一般来说,我也尽量保持系统python“干净”,即我不安装任何没有安装打包工具的东西。相反,我使用 virtualenv 或 buildout 让每个应用程序都有自己的 python 路径,它的依赖项存在。所以我拥有的每个项目基本上都有自己的一组库。这样就容易多了。

于 2009-07-04T09:46:06.313 回答
0

有几个选择...

  1. 如果模块将在 Python 2.6 下运行,您可以简单地创建从 2.6 站点包目录到 2.4 站点包目录的符号链接。

  2. 如果它们不能在 2.6 下运行,那么您可能需要针对 2.6 重新编译它们,或者安装它们的最新版本。只需确保您在调用时使用的是 2.6"python setup.py"

...

如果您遇到其他挑战,您可能希望在 serverfault.com 上发布此内容。

于 2009-07-04T07:04:44.293 回答
0

一些 Python 库可能仍然无法访问,因为 Python 2.6site-packages已更改为dist-packages.

在这种情况下,唯一的方法是将站点包中生成的所有东西(例如 by make install)移动到 dist-packages 并创建一个符号链接。

于 2009-07-04T11:40:09.000 回答
0

easy_install 是一个不错的方法,但是安装模块有一些低级的方法,只是:

  1. 将模块源解压到某个目录
  2. 输入“python setup.py install”

当然,您应该使用所需的已安装 python 解释器版本来执行此操作;检查它的类型:

蟒蛇-V

于 2009-07-05T23:19:16.510 回答