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

时间:2008-12-04 23:28:10

标签: python migration module code-migration

哪种方法最适合在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 个答案:

答案 0 :(得分:27)

始终是第二种方式 - 您永远不知道将安装哪些不同的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

答案 1 :(得分:2)

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