Python setup.py call makefile no incluye binarios

Un poco de contexto: tengo un código C que cuando compilo puedo llamar al terminal de esta manera: ./my_excec -params Genera algunos archivos que estoy usando en Python para generar gráficos y otras cosas.

Quiero empaquetar todo en una biblioteca de python, tanto el código C como el código de python. El código C no es una extensión de python (prolly va a estar en un futuro, pero ahora no lo es).

Tengo un archivo make para comstackr el código C y sé que puedo llamarlo desde setup.py así: subprocess.call(['make', '-C', 'word2vec-src'])

Lo que quiero poder hacer es: pip install my_module Eso debería llamar al makefile, comstackr la C para que el usuario pueda llamar a los binarios: my_excec -params y también poder importar el código python a su alrededor.

El problema que estoy teniendo es al empaquetar el paquete python. Estoy usando la opción data_files en la setup() esta manera: data_files=[('bin', ['bin/binary_file'])], Esto mueve los archivos de la bandeja a la carpeta de instalación (en un entorno virtual) y puedo llámalos. Pero cuando el paquete también está poniendo los archivos comstackdos en el archivo comprimido y cuando llamo pip install my_module` está colocando los archivos comstackdos desde mi computadora.

Gracias.

Pude encontrar una solución realmente fácil.

Como dije, mi principal problema era que estaba empaquetando los archivos comstackdos. Para excluir esos archivos del archivo comprimido / zip solo tenía que poner esto en MANIFEST.in: prune bin .

Entonces solo necesitas llamar al makefile desde setup.py:

 directory = 'bin' if not os.path.exists(directory): os.makedirs(directory) subprocess.call(['make', '-C', 'src']) 

Con eso, cuando alguien haga pip install whatever sea ​​que vaya a llamar al archivo make y ponga los binarios en bin (debe especificar esto en el archivo make).

Luego solo necesitas decir la configuración para copiar esos archivos:

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

¡Hecho! Espero que alguien encuentre esto útil 🙂