【问题标题】:Transition from Python2.4 to Python2.6 on CentOS, module migration problemCentOS上从Python2.4过渡到Python2.6,模块迁移问题
【发布时间】:2009-07-04 06:59:05
【问题描述】:

我在将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 的正确方法是什么?

【问题讨论】:

    标签: python linux upgrade centos python-2.6


    【解决方案1】:

    它们没有损坏,只是没有安装。解决方案是在 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 路径,它的依赖项存在。所以我拥有的每个项目基本上都有自己的一组库。这样会更容易。

    【讨论】:

    • 谢谢!将默认 python 恢复为 2.4 后,yum 恢复了活力。
    【解决方案2】:

    有几个选项...

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

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

    ...

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

    【讨论】:

    • 谢谢嘎呼!目前,2.4/site-packages 中有大约 100 个模块。我不是很高兴创建 100 个符号链接...并且要运行 setup.py,我需要找到所有源并猜测所有依赖项以确保正确的安装顺序。我认为应该有一些“书本”的解决方案。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      easy_install 是一个不错的安装方式,但是安装模块的方式比较低级,只是:

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

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

      python -V

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        • 2014-03-22
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        相关资源
        最近更新 更多