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