代码之家  ›  专栏  ›  技术社区  ›  technomalogical

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

  •  10
  • technomalogical  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  12
  •   Ferdinand Beyer    15 年前

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


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

        2
  •  4
  •   mmoya Mohammed Azharuddin Shaikh    13 年前

    try:
      import v26
    except ImportError:
      import v25
    

    Dive Into Python—Using Exceptions for Other Purposes

        3
  •  0
  •   Mike Graham    13 年前

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