Best way to import version-specific python modules

ε祈祈猫儿з 提交于 2019-12-03 11:56:10

问题


Which method makes the most sense for importing a module in python that is version specific? My use case is that I'm writing code that will be deployed into a python 2.3 environment and in a few months be upgraded to python 2.5. This:

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

or this

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

I know that either case is equally correct and works correctly but which one is preferable?


回答1:


Always the second way - you never know what different Python installations will have installed. Template is a specific case where it matters less, but when you test for the capability instead of the versioning you're always more robust.

That's how I make Testoob support Python 2.2 - 2.6: I try to import a module in different ways until it works. It's also relevant to 3rd-party libraries.

Here's an extreme case - supporting different options for ElementTree to appear:

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:


I would probably argue that the second one would be preferable. Sometimes, you can install a module from a newer version of python into an older one. For example, wsgiref comes with Python 2.5, but it isn't entirely uncommon for it to be installed into older versions (I think it will work with python 2.3 up).



来源:https://stackoverflow.com/questions/342437/best-way-to-import-version-specific-python-modules

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!