导入特定于版本的 python 模块的最佳方法
Posted
技术标签:
【中文标题】导入特定于版本的 python 模块的最佳方法【英文标题】:Best way to import version-specific python modules 【发布时间】:2010-09-25 10:33:57 【问题描述】:哪种方法最适合在 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
我知道这两种情况都同样正确并且可以正常工作,但哪种情况更可取?
【问题讨论】:
【参考方案1】:总是第二种方式 - 你永远不知道会安装哪些不同的 Python 安装。 Template
是一个不太重要的特定情况,但是当您测试功能而不是版本控制时,您总是更健壮。
这就是我如何让Testoob 支持 Python 2.2 - 2.6:我尝试以不同的方式导入一个模块,直到它工作为止。它也与 3rd-party 库有关。
这是一个极端情况 - 支持 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
【讨论】:
对于 Python 2.5 及更高版本您错过了from xml.etree import cElementTree as ET
【参考方案2】:
我可能会争辩说第二个更可取。有时,您可以将模块从较新版本的 python 安装到较旧版本中。例如,wsgiref 是 Python 2.5 自带的,但它被安装到旧版本中并不少见(我认为它可以与 python 2.3 一起使用)。
【讨论】:
以上是关于导入特定于版本的 python 模块的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章