获取CFFI构建的扩展文件的名称

时间:2018-11-16 02:26:03

标签: python python-cffi

如果构建的基于CFFI的扩展名为

ffi = FFI()
ffi.cdef("...code...")
ffi.set_source("_example", "...code...")
ffi.compile()

已创建一个已编译的扩展名文件,例如在我的系统上为"_example.cpython-36m-darwin.so"

可以以半hacky的方式导入它,而无需知道完整的文件名

sys.path.append(path)
from _example import lib
sys.path.pop()

这几乎是安全的,因为FFI扩展名不会修改sys.path,将来也不太可能这样做。不过,最好通过importlib进行完全无状态的导入:

spec = importlib.util.spec_from_file_location(
    "_example", path + "/_example.cpython-36m-darwin.so")
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
lib = mod.lib

问题在于它需要扩展文件的完整路径。是否有某种方式可以通过"_example"或标准库的方式获得带有操作系统依赖的后缀和扩展名,仅知道模块名称(cffi)的全名?

0 个答案:

没有答案