2008-12-04 60 views
13

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

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 

我知道,这两种情况下是同样正确和工作正常,但哪一个是最好?

回答

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 
+0

你已经错过了`从xml.etree进口cElementTree作为ET`为Python 2.5和高达 – jfs 2008-12-05 00:42:37

2

我可能会争辩说,第二个将是可取的。有时候,你可以从一个较新版本的Python中安装一个模块到一个较旧版本的模块中。例如,wsgiref带有Python 2.5,但它并不是很少被安装到旧版本中(我认为它可以在Python 2.3中使用)。