python cython pyinstaller

Construyendo código de Python compilado por Cython con PyInstaller



(1)

Estoy tratando de construir un código de varios archivos de Python con PyInstaller . Para eso he compilado 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 compilació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 intento 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 Cyling de paquete 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