我为Python 3.0 / 3.1编写了一个纯Python模块,我也想让它与2.x(可能只是2.6 / 2.7)兼容,以便让最广泛的受众可以使用它。
该模块涉及读取和写入一组相关的文件格式,因此2.x和3.x版本之间的差异很小 - 例如io.BytesIO
代替StringIO.StringIO
- 但并非所有这些都可以通过try / except块轻松处理,例如设置元类。
处理此问题的正确方法是什么?两个几乎完全相同的代码库必须保持同步,或者一个代码库中是否有功能检测?一个干净的代码库加上2to3或3to2?
答案 0 :(得分:11)
完全针对2.x编写代码,定位2.x系列中的最新版本。在这种情况下,它可能会保持2.7。通过2to3
运行它,如果它没有通过所有单元测试,请修复2.x版本,直到生成的3.x版本工作。
最终,当您想要删除2.x支持时,可以使用生成的3.x版本并开始直接修改它。在此之前,仅修改2.x版本。
这是2to3
工作人员强烈推荐的工作流程。不幸的是,我不记得从我收集到的所有这些文件的链接。