Ao congelar meu programa python3.8 em um msi usando cx_freeze, o msi funciona no computador em que foi construído, mas não em outros hosts.
A mensagem de erro é: OSError: Could not find lib geos_c.dll or load any of its variants [].
Pipfile:
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[packages]
cx_Freeze = "==6.2"
shapely = "==1.7.1"
[requires]
python_version = "3.8"
[scripts]
build = "python setup.py bdist_msi"
setup.py:
from cx_Freeze import setup, Executable
if __name__ == "__main__":
APP = Executable(
script="test.py",
base=None,
targetName="test", # executable name avaiable in cli after installation
)
setup(
name="test",
options={
"build_exe": {},
"bdist_msi": {
"add_to_path": True,
"all_users": True, # require admin rights
},
},
executables=[APP],
)
teste.py:
from shapely.geometry import LineString
pallet_line_string = LineString(
[
(0, 0),
(10, 0),
(10, 20),
(0, 20),
(0, 0),
]
)
print(pallet_line_string)
Windows 10
1.7.1 instalado do PyPI usando pipenv
@ypicard Sinto muito pelo problema, mas este não é um problema bem-feito. Você deve descobrir como incluir um geos_c.dll compatível em seu pacote. Aqui está como fazemos isso para rodas bem torneadas construídas no appveyor: https://github.com/Toblerity/Shapely/blob/maint-1.7/appveyor.yml#L84.
O problema é que as dlls já estão empacotadas corretamente. Eu posso encontrá-los no diretório de instalação do meu programa ( C:\Program Files (x86)\my_program\lib\shapely\DLLs
). Eles parecem estar corretamente agrupados.
O problema é que o shapely não consegue carregá-los corretamente. Eu imprimi o caminho em geos.py:166
e egg_dlls
e wininst_dlls
parecem corretos.
O que está acontecendo ?
A mensagem de erro era enganosa: o geos_c.dll
foi de fato encontrado, mas não são dependências. Eu tive que instalar o VC Redistributables da Microsoft para fazê-lo funcionar.
Obrigado!
Comentários muito úteis
A mensagem de erro era enganosa: o
geos_c.dll
foi de fato encontrado, mas não são dependências. Eu tive que instalar o VC Redistributables da Microsoft para fazê-lo funcionar.Obrigado!