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

导入特定版本python模块的最佳方法

  •  14
  • mcrute  · 技术社区  · 17 年前

    在python中导入特定于版本的模块,哪种方法最有意义?我的用例是,我正在编写将部署到python 2.3环境中的代码,并在几个月内升级到python 2.5。这个:

    if sys.version_info[:2] >= (2, 5):
        from string import Template
    else:
        from our.compat.string import Template
    

    或者这个

    try:
        from string import Template
    except ImportError:
        from our.compat.string import Template
    

    我知道这两种情况都是同样正确的,也都是正确的,但哪种情况更可取呢?

    2 回复  |  直到 17 年前
        1
  •  27
  •   orip    17 年前

    总是第二种方式——你永远不知道安装了什么不同的Python。 Template 这是一个不太重要的特定情况,但当你测试功能而不是版本控制时,你总是更健壮。

    我就是这么做的 Testoob 支持Python 2.2-2.6:我尝试以不同的方式导入模块,直到它正常工作。它也与第三方图书馆有关。

    这是一个极端情况——支持ElementTree出现的不同选项:

    try: import elementtree.ElementTree as ET
    except ImportError:
        try: import cElementTree as ET
        except ImportError:
            try: import lxml.etree as ET
            except ImportError:
                import xml.etree.ElementTree as ET # Python 2.5 and up
    
        2
  •  2
  •   Jason Baker    17 年前

    我可能会认为第二个更好。有时,您可以将较新版本的python中的模块安装到较旧版本中。例如,wsgiref附带了Python 2.5,但将其安装到旧版本中并不罕见(我认为它可以与Python 2.3以上版本一起使用)。

    推荐文章