cx_freeze "zlib not avaiable" erro ao usar vários encadeamentos
Eu tenho um aplicativo Python que funciona perfeitamente quando executado através do interpretador padrão, masnão quando congelado comcx_freeze
.
Meu aplicativo faz uso do pythonThreading
módulo, e normalmente tem cerca de 5 componentes em execução, cada um dos quais pode ser individualmente ativado / desativado em sua configuração, e cada um executando em seu próprio segmento individual.
Com 1 ou 2 componentes ativados, não há problema. No entanto, quando 3 ou mais componentes estão ativados, vejo a seguinte mensagem de erro para todos ou quase todos os meus threads:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python\64-bit\3.3\lib\threading.py", line 637, in _bootstrap_inner
File "<absolute path to my .py file on disk>", line 21, in run
from module import screenshot
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1616, in _handle_fromlist
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 313, in _call_with_frames_removed
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1534, in _find_and_load_unlocked
File "<absolute path to my .py file on disk>", line 1, in <module>
from PIL import ImageGrab
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1534, in _find_and_load_unlocked
zipimport.ZipImportError: can't decompress data; zlib not available
Algumas coisas para observar:
Python énão instalado emC:\Python\64-bit\3.3
, então não tenho certeza porque esse caminho aparece na saída acima. Ele é instalado em seu local padrão deC:\Python33
. (Não tenho certeza se o caminho mostrado acima é falso, ou talvez o caminho da pessoa que compilou uma das minhas dependências.)Para reiterar - isso começa a acontecer constantemente quando eu inicio mais de 2 threads ou mais. istoNunca acontece com apenas 1 thread ativo, e eu nunca vi isso acontecer com 2 threads ativos.Esse problemasó acontece quandocx_freeze
é usado. Executá-lo com o interpretador Python não produz erros. Eu tentei alguns diferentessetup.py
diretivas (por exemplo,appendScriptToLibrary
, appendScriptToExe
, copyDependentFiles
, create_shared_zip
), mas a questão é sempre a mesma.Meu código não faz uso de funções zip - então isso deve ser algo específico para o processo de congelamento.Meus pensamentos até agora:
Eu acho que há algum problema com um thread tentando acessar ozlib
ouzipimport
módulos quando outro thread está usando-os (ou seja, tem um bloqueio sobre eles). (Interessante que isso não aconteça para 2 tópicos.) Meu Google-ing me fez fazer alguma pesquisa sobre o GIL - isso poderia ser um problema aqui? Ou, existe alguma maneira de permitir que os segmentos só pegue um bloqueio compartilhado em um arquivo em vez de um bloqueio exclusivo?Ser um novato relativo comcx_freeze
, Eu tentei alguns métodos diferentes de incluir ozlib
módulo emsetup.py
. No entanto, não acho que isso seja um problema comzlib
especificamente, uma vez que funciona bem fora decx_freeze
.Meio Ambiente:
Windows 7 de 64 bitsPython 3.3 de 64 bitscx_freeze 4.3.2Vejohttp://www.filedropper.com/threadtest para uma reprodução desse problema com código mínimo.