У меня есть проект на c ++ 11, который я хочу экспортировать как пакет для использования python сценариями. В моем коде используются файлы lzfse C, которые я загружаю и добавляю в свой проект. Этот проект нужно скомпилировать как на MacOS, так и на Linux. Я создал следующий файл setup.py:
from distutils.core import setup, Extension
module1 = Extension('car_mechanic',
extra_compile_args=["-std=c++11"],
sources=['car_mechanic_py.cpp', 'png_parse.cpp', 'car_parse.cpp', 'lodepng.cpp', 'logger.cpp'
, 'lzfse/src/lzfse_fse_py.c', 'lzfse/src/lzfse_decode_py.c', 'lzfse/src/lzfse_encode_py.c'
, 'lzfse/src/lzfse_decode_base_py.c', 'lzfse/src/lzfse_encode_base_py.c'
, 'lzfse/src/lzvn_decode_base_py.c', 'lzfse/src/lzvn_encode_base_py.c'])
setup(name='car_mechanic',
version='1.0',
description='This package parses and changes the Asset.car ios apps use',
ext_modules=[module1])
Затем использовал python setup.py build
В этом решении есть 2 проблемы:
-std=c++11
flag не работает для. c файлов под MacOS, так как работает clang, который его не поддерживает. Также выдается предупреждение о Linux - Для каждого. c файла из библиотеки lzfse, мне нужно было добавить
#include <python2.7/Python.h>
. Так как я не хотел изменять исходные файлы, я создал файл lzfse_XXX_py.c
для каждого lsfse_XXX.c
, что делает только:
#include <python2.7/Python.h>
#include "lzfse_XXX.c"
любым лучшим способом превратить lzfse в библиотеку, используемую моим пакетом python? Решат ли Setuptools мои проблемы?