我正在对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>
欢迎提出任何想法,谢谢。