PyInstaller: IOError: No existe tal archivo o directorio:

Estoy tratando de comstackr una secuencia de comandos de python usando pyinstaller con módulos como Scientific, MMTK. Pyinstaller no pudo incluir algunos módulos .pyd, así que los copié manualmente en la carpeta dist. Cuando ejecuté el exe comstackdo me dio el siguiente error:

 C: \ Python27 \ hello \ dist \ hello> hello.exe
 Rastreo (llamadas recientes más última):
   Archivo "", línea 21, en 
   Archivo "C: \ Python27 \ iu.py", línea 436, en importHook
     mod = _self_doimport (nm, ctx, fqname)
   Archivo "C: \ Python27 \ iu.py", línea 521, en doimport
     exec co en mod .__ dict__
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / visual", línea 1, en 
   Archivo "C: \ Python27 \ iu.py", línea 436, en importHook
     mod = _self_doimport (nm, ctx, fqname)
   Archivo "C: \ Python27 \ iu.py", línea 521, en doimport
     exec co en mod .__ dict__
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / visual.visual_all", línea 1, en 
   Archivo "C: \ Python27 \ iu.py", línea 436, en importHook
     mod = _self_doimport (nm, ctx, fqname)
   Archivo "C: \ Python27 \ iu.py", línea 521, en doimport
     exec co en mod .__ dict__
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / vis", línea 13, en 
   Archivo "C: \ Python27 \ iu.py", línea 436, en importHook
     mod = _self_doimport (nm, ctx, fqname)
   Archivo "C: \ Python27 \ iu.py", línea 521, en doimport
     exec co en mod .__ dict__
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / vis.ui", línea 3, en 
   Archivo "C: \ Python27 \ iu.py", línea 477, en importHook
     mod = self.doimport (nm, ctx, ctx + '.' + nm)
   Archivo "C: \ Python27 \ iu.py", línea 521, en doimport
     exec co en mod .__ dict__
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / vis.materials", línea 159, en 
   Archivo "c: \ Python27 \ hello \ build \ pyi.win32 \ hello \ outPYZ1.pyz / vis.materials", línea 129, en loadTGA
 IOError: [Errno 2] No existe tal archivo o directorio: 'c: \\ Python27 \\ hello \\ build \\ pyi.win32 \\ hello \\ outPYZ1.pyz / turbulence3.tga'

Por cierto, puedo ver el archivo outPYZ1.pyz en esa ubicación. ¿Alguna idea?

No se trata de archivos pyd, sino de un archivo TGA no encontrado. Debe adaptar su software para buscar una ubicación diferente cuando la aplicación está empaquetada por pyinstaller. Según Acceder a archivos de datos :

En una distribución –onedir, esto es fácil: pase una lista de sus archivos de datos (en formato TOC) al COLECCIONAR, y aparecerán en el árbol de directorios de distribución. El nombre en la tupla (nombre, ruta, ‘DATOS’) puede ser un nombre de ruta relativo. Luego, en tiempo de ejecución, puede usar un código como este para encontrar el archivo:

os.path.join(os.path.dirname(sys.executable), relativename)) 

En una distribución de – OneFile, los archivos de datos se agrupan en el ejecutable y luego se extraen en el tiempo de ejecución en el directorio de trabajo mediante el código C (que también puede reconstruir los árboles de directorios). El directorio de trabajo se encuentra mejor en os.environ [‘_ MEIPASS2’]. Entonces, puedes acceder a esos archivos a través de:

 os.path.join(os.environ["_MEIPASS2"], relativename)) 

Entonces, si abres un archivo en tu progtwig, no hagas:

 fd = open('myfilename.tga', 'rb') 

Este método es abrir el archivo desde el directorio actual. Así que simplemente no funcionará para pyinstaller, porque el directorio actual no será el mismo que donde se colocarán los datos.

Dependiendo de si está utilizando --onefile , debe cambiar a:

 import os filename = 'myfilename.tga' if '_MEIPASS2' in os.environ: filename = os.path.join(os.environ['_MEIPASS2'], filenamen)) fd = open(filename, 'rb') 

O si es --onedir :

 import os, sys filename = os.path.join(os.path.dirname(sys.executable), 'myfilename.tga')) fd = open(filename, 'rb')