Получить имя файла расширения, созданного CFFI - PullRequest
0 голосов
/ 16 ноября 2018

Если построить расширение на основе CFFI как

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

создается файл скомпилированного расширения, например, в моей системе это "_example.cpython-36m-darwin.so".

Его можно импортировать в полукак, не зная полного имени файла как

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, либо с помощью стандартных библиотечных средств?

...