2009-10-07 59 views
8

今天我试着在我编写的脚本中使用pyPdf 1.12,它的目标是Python 2.6。当运行我的脚本,甚至导入pyPdf时,我会收到有关不推荐使用的功能(md5-> hashsum,sets)的抱怨。我想贡献一个补丁来使这个工作在2.6中干净利落,但我想作者不想破坏老版本(2.5及更早版本)的兼容性。在你的代码中支持多个Python版本?

搜索谷歌和堆栈溢出迄今没有发现什么。我觉得我已经看到尝试/除了导入语句块之前,完成类似的东西,但找不到任何示例。是否有支持多个Python版本的普遍接受的最佳实践?

回答

10

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


(1)就像你描述:尝试异常周围的东西和工作旧版本。例如,你可以尝试导入json模块和导入用户空间实现如果失败:

try: 
    import json 
except ImportError: 
    import myutils.myjson as json 

这是Django的一个例子(他们使用这种技术常):

try: 
    reversed 
except NameError: 
    from django.utils.itercompat import reversed  # Python 2.3 fallback 

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


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

import sys 
if sys.version_info < (2, 6, 0): 
    # Do stuff for old version... 
else: 
    # Do 2.6+ stuff 

sys.version_info是可以很容易地与类似的版本的元组相比较的元组。

0

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