Расширения сценариев установки Python, как вы включаете.H файл?

Итак, у меня есть каталог, который выглядит примерно так:

 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'])]

это вообще не работает, the .файл h даже не попадает в файл манифеста.

Итак, мой queustion, как вы включаете это расширение с файлом заголовка, чтобы python setup.py install построит ли он правильно?

2 ответов


у меня такое чувство, что pyfunc находится на пути к более стандартному решению, но я нашел другое решение самостоятельно. Я понятия не имею, является ли это хорошим решением или просто взломом, но все, что я сделал, это добавил файл заголовка в манифест.внутри. В документации на самом деле не кажется, что это то, что манифест.в файле есть for, но он работает. Мой манифест.в файле теперь выглядит так:

include ext/ext_header.h

который включает файл и успешно компилируется при запуске python setup.py install


документы,

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".

почему это не работает для вас?