12

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

 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”文件,但在我运行安装时不构建。相反,它给出了错误error: unknown file type '.h' (from 'ext/ext_header.h')

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

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

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

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

4

2 回答 2

9

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

include ext/ext_header.h

其中包括文件并在我运行时成功编译python setup.py install

于 2010-11-23T19:07:07.350 回答
3

从文档中,

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”提供包含文件。

为什么这对你不起作用?

于 2010-11-23T18:31:46.157 回答