在代码中支持多个Python版本?

在代码中支持多个Python版本?,python,versioning,Python,Versioning,今天,我尝试在我正在编写的针对Python2.6的脚本中使用1.12。当运行我的脚本,甚至导入pyPdf时,我都会抱怨不推荐使用的功能(md5->hashsum,set)。我想贡献一个补丁,让它在2.6中干净地工作,但我想作者不想破坏旧版本(2.5和更早版本)的兼容性 搜索Google和Stack Overflow到目前为止没有发现任何结果。我觉得我以前在import语句中看到过try/except块,它们实现了类似的功能,但找不到任何示例。对于支持多个Python版本,是否有公认的最佳实践?您

今天,我尝试在我正在编写的针对Python2.6的脚本中使用1.12。当运行我的脚本,甚至导入pyPdf时,我都会抱怨不推荐使用的功能(md5->hashsum,set)。我想贡献一个补丁,让它在2.6中干净地工作,但我想作者不想破坏旧版本(2.5和更早版本)的兼容性

搜索Google和Stack Overflow到目前为止没有发现任何结果。我觉得我以前在import语句中看到过try/except块,它们实现了类似的功能,但找不到任何示例。对于支持多个Python版本,是否有公认的最佳实践?

您当然可以这样做

try:
  import v26
except ImportError:
  import v25

有两种方法可以做到这一点:


(1) 正如您所描述的:尝试一些东西并解决旧版本的异常。例如,如果失败,您可以尝试导入
json
模块并导入userland实现:

try:
    import json
except ImportError:
    import myutils.myjson as json
这是Django的一个例子(他们经常使用这种技术):

如果迭代器
reversed
可用,他们将使用它。否则,它们将从
utils
包导入自己的实现


(2) 明确比较Python解释器的版本:

import sys
if sys.version_info < (2, 6, 0):
    # Do stuff for old version...
else:
    # Do 2.6+ stuff
导入系统 如果系统版本信息<(2,6,0): #为旧版本做一些事情。。。 其他: #做2.6+的事情
sys.version\u info
是一个可以轻松与类似版本元组进行比较的元组。

这里支持多种Python版本。您可以a)有条件地使用较新的版本,这需要一点工作;或b)关闭警告,这应该是默认设置(并且在较新的python上)。

+1但这里有一个到相关部分的直接链接:
import sys
if sys.version_info < (2, 6, 0):
    # Do stuff for old version...
else:
    # Do 2.6+ stuff