在CentOS上从Python2.4过渡到Python2.6,模块迁移问题

3 投票
4 回答
6788 浏览
提问于 2025-04-15 12:41

我在把Python从2.4升级到2.6时遇到了问题:

我使用的是CentOS 5(完整版)。系统里有Python 2.4,路径在/usr/lib/python2.4/。另外一些模块放在/usr/lib/python2.4/site-packages/。我已经从源代码编译了Python 2.6,路径是/usr/local/lib/python2.6/。我把默认的Python设置成了python2.6。现在,之前2.4的老模块不在Python的搜索路径里了,所以找不到了。特别是,yum这个工具坏掉了,提示“找不到yum模块”。

那么,正确的方法是什么,才能把模块迁移或安装到python2.6上呢?

4 个回答

0

这里有几种选择...

  1. 如果这些模块可以在 Python 2.6 下运行,你可以简单地从 2.6 的 site-packages 目录创建指向 2.4 的符号链接。

  2. 如果它们不能在 2.6 下运行,那么你可能需要重新编译它们以适应 2.6,或者安装它们的最新版本。记得在运行 "python setup.py" 时使用 2.6。

...

如果你遇到其他问题,可以考虑在 serverfault.com 上发帖求助。

0

有些Python库可能还是无法使用,因为在Python 2.6中,site-packages的名称变成了dist-packages

在这种情况下,唯一的办法就是把在site-packages里生成的所有东西(比如通过make install安装的)移动到dist-packages里,并创建一个符号链接。

3

它们并没有坏掉,只是没有安装而已。解决这个问题的方法是要在2.6版本下安装它们。不过在此之前,我们得先看看你是否真的需要这么做……

是的,安装Python后,python这个命令会指向你安装的版本(除非你用--alt-install来运行)。你没有明确说明你的问题是什么,所以我来猜一下。你的问题可能是,很多本地命令现在都失败了,因为它们是用Python 2.6来执行的,而不是Python 2.4。这样对吗?

如果是这样的话,那你只需要删除/usr/local/bin/python,然后确保/usr/bin/python是指向/usr/bin/python2.4的符号链接。这样你就得输入python2.6来运行Python 2.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路径,依赖项就放在那儿。这样我每个项目基本上都有自己的一套库。这样做会更简单。

撰写回答