Construyendo código de Python comstackdo por Cython con PyInstaller

Estoy tratando de construir un código de varios archivos de Python con PyInstaller . Para eso he comstackdo el código con Cython , y estoy usando archivos .so generados en lugar de archivos .py .

Suponiendo que el primer archivo es main.py y los importados son file_a.py y file_b.py , obtengo file_a.so y file_b.so después de la comstackción de Cython.

Cuando coloco main.py , file_a.so y file_b.so en una carpeta y lo ejecuto con "python main.py" , funciona.

Pero cuando lo construyo con PyInstaller e bash ejecutar el ejecutable generado, genera errores para las importaciones realizadas en file_a y file_b .

¿Cómo se puede arreglar esto? Una solución es importar todos los módulos estándar en main.py y esto funciona. Pero si no deseo cambiar mi código, ¿cuál puede ser la solución?

Así que tengo esto para trabajar para ti.

Por favor, eche un vistazo a las extensiones de Bundling Cython con Pyinstaller

Inicio rápido:

 git clone https://github.com/prologic/pyinstaller-cython-bundling.git cd pyinstaller-cython-bundling ./dist/build.sh 

Esto produce un binario estático:

 $ du -h dist/hello 4.2M dist/hello $ ldd dist/hello not a dynamic executable 

Y produce la salida:

 $ ./dist/hello Hello World! FooBar 

Básicamente, esto se setup.py a la producción de un simple setup.py que construye las extensiones file_a.so y file_b.so y luego usa pyinstaller para agrupar las aplicaciones en una sola ejecución.

Ejemplo setup.py :

 from glob import glob from setuptools import setup from Cython.Build import cythonize setup( name="test", scripts=glob("bin/*"), ext_modules=cythonize("lib/*.pyx") ) 

Construyendo las extensiones:

 $ python setup.py develop 

Agrupar la aplicación:

 $ pyinstaller -r file_a.so,dll,file_a.so -r file_b.so,dll,file_b.so -F ./bin/hello