Pergunta

Eu escrevi um programa GUI bastante simples para automatizar alguns processos para usuários do Windows em Python (já que é a única linguagem de programação com a qual estou familiarizado que pode ser executada no Windows).Idealmente, eu não gostaria que o usuário executasse um programa de instalação em sua máquina, pois meu plano é que ele seja executado de forma independente em uma unidade USB.

Depende de os, shutil, string, sys, tkinter, webbrowser, PIL, ftplib e glob.

Parece que todas as dependências foram importadas quando executei cx_freeze nele, exceto PIL.Eu nunca usei cx_freeze antes, então posso estar fazendo algo errado, mas não parece.Executar o programa a partir do script .py descongelado funciona perfeitamente.

Esta é a mensagem de erro que recebo ao tentar usar um 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

Obrigado por qualquer ajuda que você possa fornecer.Vejo que ainda está referenciando C:\Python32 o que pode ser parte do problema, porque não deveria ser (se não me engano).

Atualizar:

Eu olhei para o FAQ do PIL e parece que a essência dessa resposta é que preciso ter certeza de que minha lista sys.path está correta.Basicamente, peguei todos os arquivos Python para Windows e os incluí na unidade USB que estou tentando usar para conter tudo, e configurei meu caminho assim:

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 os caminhos parecem corretos, mas por algum motivo ainda estou recebendo o mesmo erro.Quando executo o arquivo .py, tudo funciona 100%, mas isso parece quebrar de alguma forma.Outros módulos parecem funcionar bem como shutil, os e sys, por exemplo.

Foi útil?

Solução

Acho que seu principal problema pode ser que a Python Imaging Library (PIL) ainda não suporta Python 3.x.

Se você olhar para o Página de downloads do PIL você verá que há downloads do Windows para Python 2.4, 2.5, 2.6 e 2.7, mas nada para Python 3.x.

Essa questão tem uma resposta que detalha portas não oficiais do PIL para Python 3.x que pode valer a pena tentar.

Se isso funcionar, você pode dar uma olhada a primeira pergunta no PIL FAQ que é sobre o erro "O módulo _imaging C não está instalado" e lista várias coisas que você pode fazer para identificar o problema.

Outras dicas

No passado, descobri que cx_Freeze tinha problemas para obter as DLLs corretas no Windows.

eu usei Explorador de processos para rastrear quais DLLs estavam sendo procuradas, mas não encontradas, e então adicioná-las ao projeto manualmente, e isso fez com que funcionasse.Como faria o mesmo com qualquer arquivo, imagino que o mesmo poderia ser feito no seu caso.

Isso foi para meu uso com PySFML, portanto sua milhagem pode variar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top