【问题标题】:Determining if a given Python module is part of the standard library确定给定的 Python 模块是否是标准库的一部分
【发布时间】:2013-02-02 13:11:18
【问题描述】:

如何确定 Python 模块是否是标准库的一部分? 换句话说:是否有 Python 等效于 perl 的 corelist 实用程序?

我会用它来设定我对开发过程中可移植性的期望。 如果它依赖于实现,我对 CPython 很感兴趣。

目前我找到的最佳答案是这样的:

Which parts of the python standard library are guaranteed to be available?

即在Python标准库文档的索引页搜索模块名称:http://docs.python.org/2/library/。但是,这不如使用实用程序方便,并且也没有告诉我有关最低要求版本的任何信息。

【问题讨论】:

  • 请注意,某些模块仅在使用某些设置编译 Python 时才存在,例如,如果您在没有安装 sqlite 头文件的机器上编译 Python,则解释器将不支持 sqlite,即使该模块是自 Python 2.5 以来标准库的一部分。所以在某些极端情况下可能会有点棘手。

标签: python module standard-library


【解决方案1】:

使用 setuptools 安装脚本 (setup.py) 时,您测试 所需的模块,并更新安装依赖项列表以添加反向端口(如果需要)。

例如,假设您需要 collections.OrderedDict 类。文档声明它是在 Python 2.7 中添加的,但 backport is available 适用于 Python 2.4 及更高版本。在setup.py 中,您测试collections 中的类是否存在。如果导入失败,请将反向端口添加到您的需求列表中:

from setuptools import setup

install_requires = []

try:
    from collections import OrderedDict
except ImportError:
    install_requires.append('ordereddict')

setup(
    # ...
    install_requires=install_requires
)

然后在您需要 OrderedDict 的代码中使用相同的测试:

try:
    from collections import OrderedDict
except ImportError:
    # use backported version
    from ordereddict import OrderedDict

并依靠pipeasy_installzc.buildout 或其他安装工具为您获取额外的库。

最近添加的许多核心库都提供了向后移植,包括 json(称为 simplejson)、argparsesqlite3pysqlite 包,使用 from pysqlite2 import dbapi as sqlite3 作为后备)。

仍然必须阅读文档; Python 文档非常出色,对于新模块、类、方法、函数或参数,文档在添加的 Python 版本中明确提及。

【讨论】:

    【解决方案2】:

    您应该阅读该模块的文档。你说你想要一个实用程序,因为阅读文档很不方便。但是您正在针对模块进行编码?在这种情况下,无论如何你都应该花点时间阅读文档,除非你只是通过将你在网上找到的神秘 sn-ps 粘贴在一起来制作一个科学怪人的怪物。

    您不会使用几十个模块,您可以花点时间阅读文档。此外,通常,文档确实会提到引入它们的 Python 版本。

    文档很好:使用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 2011-06-22
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多