【问题标题】:Dynamically choosing Python library based on Python version根据 Python 版本动态选择 Python 库
【发布时间】:2014-08-10 00:25:56
【问题描述】:

我正在编写一个 Python 脚本,它需要在默认为 Python 2.6 的 RHEL 6.x 上运行,但也应该适用于最新的 Python。我需要解析命令行参数,但是 Python 2.6 仅包含 optparse,在最近的 Python 中已弃用它以支持 argparse。有没有办法动态选择是使用 argparse 还是 opt parse (我意识到这需要两个解析算法)?

【问题讨论】:

    标签: python command-line


    【解决方案1】:

    尝试先导入argparse,如果找不到再使用optparse

    try:
        import argparse
        # Argparse-specific stuff
    except ImportError:
        import optparse
        # Optparse-specific stuff
    

    您也可以使用sys.versionsys.version_info 来检查python 版本。

    import sys
    if (sys.version_info.major >= 2 and sys.version_info.minor >= 7):
        import argparse
        # ...
    else:
        import optparse
    

    或者,如果您不需要 argparse 具有的改进功能,您可以在所有版本上使用 optparse

    【讨论】:

    • 我在第一个示例中使用了 ImportError 方法,但在每次导入后都导入了我自己的模块。 import argparse 后跟 import argparseinterface as xparse 这允许以下代码使用标准接口,而无需考虑版本。
    【解决方案2】:

    暂时使用optparse安装argparse from PyPI 以安装Python 2.6。

    不要为了支持两个 Python 版本而尝试同时支持两者;免得自己头疼。 optparse 可能已被弃用,但在使用 Python 2.7 运行时仍然可以正常工作。它的功能比argparse 所能提供的要少。

    如果您也必须在 Python 3.x 安装上运行,那么您可以尝试使用导入保护来支持两者:

    try:
        import argparse
        # configure argparse
    except ImportError:
        import optparse
        # configure optparse
    

    但将argparse 作为依赖项会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多