Python安装脚本扩展,你如何包含.h文件?

时间:2010-11-23 17:55:01

标签: python c installation setup.py

所以我有一个看起来像这样的目录:

 home\
     setup.py
     some_python_file.py
     ext\
         __init__.py
         c_file1.c
         c_file2.c
         ext_header.h

显然,头文件是编译c文件所必需的,但问题是我无法让安装脚本包含头文件。

我的扩展程序对象是这样的:

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c'])

哪个有效,但不包括头文件。如果我将其更改为:

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c', 'ext_header.h'])

它包含'.h'文件,但在运行install时不会生成。相反,它给出了错误error: unknown file type '.h' (from 'ext/ext_header.h')

如果我将头文件包含为这样的数据文件:

data_files=[('ext', ['ext/ext_header.h'])]

根本不起作用,.h文件甚至没有进入MANIFEST文件。

所以我的问题是,你如何将这个扩展包含在头文件中,以便python setup.py install能正确构建它?

2 个答案:

答案 0 :(得分:8)

我有一种感觉pyfunc正在寻找更标准的解决方案,但我确实找到了另一种解决方案。我不知道这是一个好的解决方案还是只是一个黑客,但我所做的只是将头文件添加到MANIFEST.in。文档并没有真正让它看起来像是MANIFEST.in文件的用途,但它确实有效。我的MANIFEST.in文件现在看起来像这样:

include ext/ext_header.h

包含该文件并在我运行python setup.py install

时成功编译

答案 1 :(得分:2)

来自文档,

module1 = Extension('demo',
                define_macros = [('MAJOR_VERSION', '1'),
                                 ('MINOR_VERSION', '0')],
                include_dirs = ['/usr/local/include'],
                libraries = ['tcl83'],
                library_dirs = ['/usr/local/lib'],
                sources = ['demo.c'])

您应该通过" include_dirs"。

提供包含文件

为什么这对你不起作用?