python - Python 使用 Setuptools 在 API 模式下构建 CFFI
问题描述
我正在尝试学习如何创建一个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)
安装程序.py
from setuptools import setup
setup(
name = 'Foo',
version = '0.1',
packages = ['foopkg'],
cffi_modules=["foopkg/build_foo.py:ffi"],
install_requires = ['cffi']
)
解决方案
我认为以结尾的文件名abi3.so
与 Python 的PEP 425 abi tag 相关,而不是用于如何使用 CFFI 生成的绑定的 ABI 模式选项。据我所知,cffi_module
安装只是未能将任何平台特定信息添加到共享对象文件中,但我认为调用的 Python 代码foopkg
仍然可以get_one()
在 API 模式下访问。
推荐阅读
- javascript - 如何将这两个宏脚本合二为一
- sonarqube - 如何在黄瓜中一个接一个地运行这些方法
- redash - 如何在 redash API 中通过电子邮件 ID 获取特定用户?
- arrays - Vue 2 - 如何从对象内部的数组中获取属性
- c# - AuthorizeAttribute 在 .net 5 web api 中不起作用
- sql - 按句点连接 Oracle SQL 行
- javascript - 如何在悬停时显示和隐藏 div 中的某些元素?
- javascript - 在 redux 措辞错误中更新数组对象?
- flutter - 关闭运行颤振应用程序的浏览器选项卡时,有没有办法显示警告对话框?
- react-native - 用于格式化 Solar Hijri 日历的可导入、react-native 兼容库