Pregunta

Escribí un programa GUI bastante simple para automatizar algunos procesos para los usuarios de Windows en Python (ya que es el único idioma de programación, estoy algo familiarizado con eso se ejecutará en Windows). Idealmente, no quisiera que el usuario tenga que ejecutar un programa de instalación en su máquina, ya que mi plan es para que se ejecute autocontenido en una unidad USB.

Depende del sistema operativo, el ostentación, la cadena, el sistema, el tkinter, webbrowser, pil, ftplib y glob.

Parece que todas las dependencias se importaban cuando corrí CX_Freeze, excepto PIL. Nunca he usado CX_Freeze antes, así que podría estar haciendo algo mal, pero no parece que. Ejecutar el programa de la secuencia de comandos .py enrozen funciona bien.

Aquí está el mensaje de error que recibo al intentar usar un comando PIL:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "E:\AlbumUploader.py", line 143, in OnButton2Click
    img.thumbnail(size, Image.ANTIALIAS)
  File "C:\Python32\lib\site-packages\PIL\Image.py", line 1573, in thumbnail
    self.load()
  File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 168, in load
    self.load_prepare()
  File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 234, in load_prepare
    self.im = Image.core.new(self.mode, self.size)
  File "C:\Python32\lib\site-packages\PIL\Image.py", line 39, in __getattr__
    raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed

Gracias por cualquier ayuda que pueda proporcionar. Veo que todavía está haciendo referencia a C: \ Python32, lo que podría ser parte del problema, porque no debería ser (si no me equivoco).

Actualización:

Miré las Preguntas frecuentes del PIL y parece que la esencia de esa respuesta es que necesito asegurarme de que mi lista de sys.path sea correcta. Básicamente, tomé todos los archivos de Python para Windows e incluyénlo en la unidad USB que estoy tratando de usar para contener todo, y configurar mi camino así:

program_dir = os.path.split(sys.argv[0])[0]
sys.path = [program_dir]
sys.path.append(program_dir + os.sep + 'Lib')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages' + os.sep + 'PIL')
sys.path.append(program_dir + os.sep + 'DLLs')

Todos los caminos parecen correctos, pero por alguna razón todavía estoy recibiendo el mismo error. Cuando ejecuto el archivo .py, todo funciona al 100%, pero esto parece romperlo de alguna manera. Otros módulos parecen funcionar bien, como el sirido, el sistema operativo y el sistema, por ejemplo.

¿Fue útil?

Solución

Creo que su principal problema puede ser que la Biblioteca de Imaging Python (PIL) aún no es compatible con Python 3.x.

Si mira el PIL Downloads Page verás queHay descargas de Windows para Python 2.4, 2.5, 2.6 y 2.7, pero nada para Python 3.x.

Esta pregunta tiene una respuesta que detalla los puertos no oficiales de PIL para Python 3.x que podría valer la pena intentarlo.

Si eso funciona, podría echar un vistazo a la primera pregunta en las PAQ PIL que se trata del error "El módulo _imaging c no está instalado" y enumera varias cosas que puede hacer para identificar el problema.

Otros consejos

En el pasado, he encontrado cx_freeze para tener problemas que tiran de las DLL correctas debajo de Windows.

He utilizado proceso Explorer para rastrear lo que se buscaban DLLS,Pero no se encuentra, y luego los agregó al proyecto manualmente, y esto lo ha trabajado.Como lo haría lo mismo para cualquier archivo, me imagino que lo mismo podría hacerse en su caso.

Esto fue para mi uso con PYSFML, por lo que su kilometraje puede variar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top