gpt4 book ai didi

python - 使用 CFFI 构建 Python-C 扩展,但 Setuptools 不在构建中包含自定义头文件

转载 作者:行者123 更新时间:2023-12-05 07:21:21 25 4
gpt4 key购买 nike

我正在尝试使用 Python 中的 CFFI 包为现有的 C 代码创建 Python 接口(interface)。

我可以按照 this blog post 编译 C 库.现在我想使这个 python 库可用,而无需对 sys.path 进行任何花哨的更新。

我发现也许通过 Python 的 setuptools setup() 函数创建一个发行版就可以实现这一点,我通过创建一个 setup.py 文件来让它大部分工作

import os
import sys

from setuptools import setup, find_packages

os.chdir(os.path.dirname(sys.argv[0]) or ".")

setup(
name="SobelFilterTest",
version="0.1",
description="An example project using Python's CFFI",
packages=find_packages(),
install_requires=["cffi>=1.0.0"],
setup_requires=["cffi>=1.0.0"],
cffi_modules=[
"./src/build_sobel.py:ffi",
"./src/build_file_operations.py:ffi",
],
)

,但我遇到了这个错误

build/temp.linux-x86_64-3.5/_sobel.c:492:19: fatal error: sobel.h: No such file or directory

据我所知,问题是 sobel.h 文件没有上传到 setuptools.setup() 创建的 build 文件夹中。我寻找有关如何操作的建议,包括使用 Extensions() 和编写 MANIFEST.in 文件,两者似乎都添加了正确头文件的相对路径:

MANIFEST.in
setup.py
SobelFilterTest.egg-info/PKG-INFO
SobelFilterTest.egg-info/SOURCES.txt
SobelFilterTest.egg-info/dependency_links.txt
SobelFilterTest.egg-info/requires.txt
SobelFilterTest.egg-info/top_level.txt
src/file_operations.h
src/macros.h
src/sobel.h

但我仍然收到相同的错误消息。是否有将头文件添加到 build 文件夹的正确方法?谢谢!

最佳答案

实际上不是 pip 缺少 .h 文件,而是编译器(如 gcc)。因此,这不是将丢失的文件添加到设置中,而是确保 cffi 可以找到它。一种方法(如评论中所述)是通过环境变量使其可供编译器使用,但还有另一种方法。

当使用 cffi 设置源代码时,您可以像这样为编译器添加目录:

from cffi import FFI

ffibuilder = FFI()
ffibuilder.set_source("<YOUR SOURCE HERE>", include_dirs=["./src"])

# ... Rest of your code
"""

关于python - 使用 CFFI 构建 Python-C 扩展,但 Setuptools 不在构建中包含自定义头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com