9

我已经为 Python 3.0/3.1 编写了一个纯 Python 模块,我还想让它与 2.x(可能只有 2.6/2.7)兼容,以便让尽可能多的受众使用它。

该模块涉及读取和写入一组相关的文件格式,因此 2.x 和 3.x 版本之间的差异会很小——例如io.BytesIO,而不是StringIO.StringIO——但并非所有这些都可以通过 try/except 块轻松处理,例如作为设置元类。

处理这个问题的正确方法是什么?两个必须保持同步的几乎相同的代码库还是一个带有特征检测的代码库?一个单一的、干净的代码库加上 2to3 或 3to2?

4

1 回答 1

11

完全针对 2.x 编写代码,针对 2.x 系列中的最新版本。在这种情况下,它可能会保持 2.7。运行它2to3,如果它没有通过所有的单元测试,则修复 2.x 版本,直到生成的 3.x 版本正常工作。

最终,当您想放弃 2.x 支持时,您可以使用生成的 3.x 版本并直接开始修改它。到那时,修改2.x版本。

这是工作人员强烈推荐的工作流程2to3。不幸的是,我不记得我从中收集到所有这些的文档的链接。

于 2010-09-23T09:06:15.057 回答