【发布时间】:2019-11-18 11:52:51
【问题描述】:
我正在尝试使用 Python 中的 CFFI 包为现有的 C 代码创建 Python 接口。
我可以按照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 文件夹?谢谢!
【问题讨论】:
-
您可以使用
CFLAGSenv var 来调整包含路径,例如CFLAGS="-I$(pwd)/src/" python setup.py build_ext等 -
哇,我被这个问题困扰了好几天,非常感谢。有没有办法给评论点赞?
-
很高兴我能帮上忙!我想当您获得更多声誉时,您将能够为 cmets 投票;但是,无论如何,支持 cmets 对 IMO 毫无用处,所以我不会打扰。
标签: python makefile setuptools python-cffi cffi