2013-08-26 2 views
4

В некотором контексте: у меня есть код C, который при компиляции я могу вызвать в терминале следующим образом: ./my_excec -params Он генерирует некоторые файлы, которые я использую в python для генерации диаграмм, и другие вещи.Python setup.py make make make не содержит двоичные файлы

Я хочу упаковать все в библиотеке python как код C, так и код python. C-код не является расширением python (в будущем он будет в будущем, но сейчас нет).

У меня есть сделать файл для компиляции кода C, и я знаю, что могу назвать это из setup.py, как это: subprocess.call(['make', '-C', 'word2vec-src'])

То, что я хочу быть в состоянии сделать это: pip install my_module Это должно вызвать makefile, скомпилируйте C, чтобы пользователь мог вызывать двоичные файлы: my_excec -params, а также иметь возможность импортировать код питона вокруг него.

Проблема, возникающая при упаковке пакета python. Я использую параметр data_files в setup() следующим образом: data_files=[('bin', ['bin/binary_file'])], Это перемещает файлы из bin в папку установки (в виртуальном env), и я могу их вызвать. Но когда упаковка также помещает скомпилированные файлы в tarball, и когда я вызываю pip install, my_module` помещает скомпилированные файлы с моего компьютера.

Спасибо.

ответ

3

Я смог найти действительно легкое решение.

Как я уже сказал, моя основная проблема заключалась в том, что я упаковывал скомпилированные файлы. Чтобы исключить эти файлы из tarball/zip, просто нужно было поместить это на MANIFEST.in: prune bin.

Тогда просто нужно позвонить в Makefile из setup.py:

directory = 'bin' 
if not os.path.exists(directory): 
    os.makedirs(directory) 

subprocess.call(['make', '-C', 'src']) 

При том, что, когда кто-то pip install whatever собирается назвать файл грим и поместить исполняемые файлы на bin (должны указать это на марке файл).

Тогда просто нужно сказать настройки, чтобы скопировать эти файлы:

setup(
... 
data_files=[('bin', ['bin/binaries'])], 
) 

Готово! Hopefuly кто-то найдет это полезным :)

+0

Это действительно полезно. У вас есть ссылка на ваш полный исходный код где-нибудь? Меня интересует, как вы структурировали свой Makefile. –

Смежные вопросы