Python для сборки CFFI в режиме API с помощью Setuptools - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь узнать о создании CFFI модулей и упаковке их в setuptools.Когда я запускаю скрипт сборки build_foo.py, я получаю библиотеку режима API, но при попытке pip install . я получаю библиотеку режима ABI.

Создает режим API

$> python build_foo.py
$> ls
build_foo.py  _one_cffi.cpython-36m-x86_64-linux-gnu.so
_one_cffi.c   _one_cffi.o

СоздаетРежим ABI

$> pip install .
$> ls env/bin/site-packages
cffi                                           pkg_resources
cffi-1.11.5.dist-info                          pkg_resources-0.0.0.dist-info
_cffi_backend.cpython-36m-x86_64-linux-gnu.so  __pycache__
easy_install.py                                pycparser
Foo-0.1.dist-info                              pycparser-2.19.dist-info
foopkg                                         setuptools
_one_cffi.abi3.so                              setuptools-40.6.2.dist-info
pip                                            wheel
pip-18.1.dist-info                             wheel-0.32.3.dist-info

Файлы

build_foo.py

#!/usr/bin/env python3

import cffi

ffi = cffi.FFI()
ffi.cdef("int get_one();")
ffi.set_source("_one_cffi",
"""
int get_one() {
    return 1;
}

"""
)

if __name__ == '__main__':
    ffi.compile(verbose=True)

setup.py

from setuptools import setup
setup(
    name = 'Foo',
    version = '0.1',
    packages = ['foopkg'],
    cffi_modules=["foopkg/build_foo.py:ffi"],
    install_requires = ['cffi']
)

1 Ответ

0 голосов
/ 19 августа 2019

Я думаю, что имя файла, оканчивающееся на abi3.so, имеет отношение к тегу PEP 425 в Python, а не к опции ABI-mode для использования сгенерированных привязок CFFI.Насколько я могу судить, при установке cffi_module просто не удается добавить какую-либо информацию о конкретной платформе в общий объектный файл, но я думаю, что код Python, который вызывает foopkg, по-прежнему может обращаться к get_one() в API-режиме.

...