Python C API:具有绝对文件路径的导入模块

时间:2019-02-14 03:02:43

标签: python-c-api

我正在对Python C扩展进行原型设计,该扩展应该能够以最小的开销非常快速地导入大量python模块。 我的扩展程序将基于其自身的逻辑了解模块名称及其绝对路径。我想避免使用内置的导入机制(即,我不需要查找sys.path来查找模块),并且避免使用 importlib ,因为这样做的开销很大一百个模块。

我正在尝试找到一种干净的C-API替代方法:

from importlib import util
spec = util.spec_from_file_location("stub", "/ars/python/stub.py")
stub = util.module_from_spec(spec)
spec.loader.exec_module(stub)

我看到了这样的建议

PySys_SetPath("path/with/python/files");
PyObject *pModule = PyImport_ImportModule("filename_without_extension");

这仍在搜索 sys.path ,我需要避免使用它。

PyObject *imp = PyImport_ImportModule("imp");
PyObject_CallMethod(imp , "load_source", args, "<my_mod>", "<mod_path>");

此版本使用旧的 imp 模块并打印弃用警告。目前尚不清楚如何用新的 importlib 替换它,因为没有像以前的 imp 这样的高级 load_source 方法。 / p>

欢迎提出任何想法,谢谢。

0 个答案:

没有答案