我想使用importlib.machinery.EXTENSION_SUFFIXES
Python 3,但不幸的是我使用 Python 2.7。
EXTENSION_SUFFIXES
计算结果为['.cpython-34m-x86_64-linux-gnu.so', '.cpython-34m.so', '.abi3.so', '.so']
,但这特定于我的机器并且可能是 python 版本,所以我不能简单地对列表进行硬编码。
这是EXTENSION_SUFFIXES
Python 3源代码中构建的位置:https://github.com/python/cpython/blob/3.6/Lib/importlib/_bootstrap_external.py#L1431。然而,它似乎深入到 C 实现(链接)中,所以我不清楚如何获取此信息。
如何在 Python 2.7 中获取此列表?
返回 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 中已弃用。