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

时间:2009-10-07 15:48:29

标签: python versioning

今天我尝试在我编写的针对Python 2.6的脚本中使用pyPdf 1.12。在运行我的脚本,甚至导入pyPdf时,我会收到有关已弃用功能的投诉(md5-> hashsum,sets)。我想提供一个补丁来使这项工作在2.6中干净利落,但我想作者不想破坏旧版本(2.5及更早版本)的兼容性。

迄今为止,搜索Google和Stack Overflow都没有发现。我觉得我在导入语句之前看过try / except块之前完成类似的事情,但是找不到任何例子。是否有支持多个Python版本的普遍接受的最佳实践?

3 个答案:

答案 0 :(得分:12)

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


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

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是一个可以轻松与类似版本元组进行比较的元组。

答案 1 :(得分:4)

你当然可以做到

try:
  import v26
except ImportError:
  import v25

Dive Into Python—Using Exceptions for Other Purposes

答案 2 :(得分:0)

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