Python 2.7 相当于 importlib.machinery.EXTENSION_SUFFIXES

ty.*_*ty. 3 python python-2.7

我想使用importlib.machinery.EXTENSION_SUFFIXESPython 3,但不幸的是我使用 Python 2.7。

EXTENSION_SUFFIXES计算结果为['.cpython-34m-x86_64-linux-gnu.so', '.cpython-34m.so', '.abi3.so', '.so'],但这特定于我的机器并且可能是 python 版本,所以我不能简单地对列表进行硬编码。

这是EXTENSION_SUFFIXESPython 3源代码中构建的位置:https://github.com/python/cpython/blob/3.6/Lib/importlib/_bootstrap_external.py#L1431。然而,它似乎深入到 C 实现(链接)中,所以我不清楚如何获取此信息。

如何在 Python 2.7 中获取此列表?

use*_*ica 5

改用imp.get_suffixes()

返回 3 元素元组的列表,每个元组描述一种特定类型的模块。每个三元组的形式为 (suffix, mode, type),其中 suffix 是要附加到模块名称以形成要搜索的文件名的字符串,mode 是要传递给内置 open() 函数的模式字符串打开文件(对于文本文件可以是“r”,对于二进制文件可以是“rb”),type 是文件类型,其值为 PY_SOURCE、PY_COMPILED 或 C_EXTENSION 之一,如下所述。

因此,要将其过滤到 C 扩展模块的后缀列表中:

import imp
extension_suffixes = [suffix for (suffix, mode, type) in imp.get_suffixes()
                             if type == imp.C_EXTENSION]
Run Code Online (Sandbox Code Playgroud)

这在 Python 3 中也适用,尽管imp在 Python 3 中已弃用。