【问题标题】:Make Python 2 compatible with Python 3使 Python 2 与 Python 3 兼容
【发布时间】:2015-05-13 11:47:29
【问题描述】:

我目前的要求是在Python 2.4.3 中编写一个脚本,该脚本与 RHEL 5 捆绑在一起。但是几年后说 5 年,服务器可能会升级到 RHEL 8 或 9 附带Python 3。所以我应该编写与这两个版本兼容的代码。现在我的脚本包含基本操作,例如创建目录、解压缩文件、文件操作、XML 文件读取(我现在正在使用 minidom 进行)和一些散列。

现在我发现一个名为python-modernize 的工具可以完成构建在2to3 之上的工作。我搜索了该工具,但得到了一个 tar.gz 文件。正如他们在使用中所说的那样,它不包含 python-modernize 文件。但我发现的只是一个setup.py 文件。我是 Python 新手,我所知道的是 pip 已经完成了一些事情。但我也读到使用 pip 对于 Python 2.4.3 来说是一项艰巨的工作。

请告诉我如何才能完成这项工作。

我也提到了this,但找不到如何使用该工具。

如果有任何好的替代方案,请告诉我。

【问题讨论】:

  • docs.python.org/3/howto/pyporting.html。这也建议迁移到 Python 2.7 - 如果您必须继续支持 2.4.3(这甚至不是 2.4 分支上的最新版本;请参阅 python.org/download/releases/2.4.3),还有更多不兼容之处。
  • @jonrsharpe 服务器中的 RHEL 直到 5 年后才会更新。我试图说服上级更新 Python,但徒劳无功:|我试图让他们安装 python 3,但他们要求一个 rpm 文件:(
  • 参见例如blog.serverdensity.com/updating-python-on-rhelcentos 或者,干脆放弃,现在编写工作代码并担心 Py3 移植何时(以及是否)升级实际发生; 5 年是一个漫长的时间!
  • +1 亿给@jonrsharpe - 用你所拥有的约束编写代码。五年对于 IT 来说是永恒的。从现在起 5 年后您很有可能不会使用此脚本。 :-D
  • @jonrsharpe 阅读愉快!但是这些人也不会安装任何开源 rpm。我想我必须接受我所拥有的。

标签: python porting python-2to3


【解决方案1】:

使用来自 Benjamin Peterson 的 six 库。

它是专门为这个用例设计的。 它允许您通过从六个库中导入与 2 到 3 不同的东西来拥有一个同时支持 Python 2 和 Python 3 的代码库。

只需简单地导入它并使用它的定义:

import six

示例:

from six import u, b

以上是 Python 3+ 对 Unicode 字符串和字节的工作方式进行更严格更改的经典案例。

Six 是一个 Python 2 和 3 兼容库。它提供实用程序 用于平滑 Python 之间差异的函数 以编写兼容的 Python 代码为目标的版本 两个 Python 版本。有关更多信息,请参阅文档 提供什么。

Six 支持自 2.5 以来的所有 Python 版本。它仅包含在 一个 Python 文件,因此可以轻松地将其复制到您的项目中。 (这 版权和许可声明必须保留。)

更新:对不起,我错过了Python<=2.5 的要求;但老实说,我认为使用六个是你​​最好的选择。您必须说服您拥有至少使用 Python 2.5 的权力。

更新 #2: 我最强烈的建议是至少将您的代码升级到 Python 2.7。不要落后,否则您将永远落后于球!

更新 #3: 根据上述非常有用的 cmets;我同意。只需使用你现在拥有的东西。 5年确实很长,到时候可能就没有同样的限制了!

【讨论】:

  • “Six 支持自 2.5 以来的所有 Python 版本” OP 将 2.4.3 作为其版本之一。
  • @Cyber​​ 好点;我不确定 Python good 解决方案;几年前,甚至电路也放弃了对 2.5 的支持 :) sigh
  • @JamesMills 我试图说服服务器人员升级,但他们要等到未来 5 年才会升级。还尝试要求他们安装 python 3,但他们要求提供 rpm 文件。我想我没有任何选择了。还有其他选择吗?
  • @ViChU 恐怕不是。对软件系统的这种态度是 IHMO 过时的、容易出错且充满维护噩梦的。我不确定是否有任何选项可以满足您的需求:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多