Lors du gel de mon programme python3.8 dans un msi à l'aide de cx_freeze, le msi fonctionne sur l'ordinateur sur lequel il a été construit mais pas sur d'autres hôtes.
Le message d'erreur est : 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],
)
test.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 installé à partir de PyPI en utilisant pipenv
@ypicard Je suis désolé pour le problème, mais ce n'est pas un problème bien fait. Vous devez déterminer comment inclure un geos_c.dll compatible dans votre bundle. Voici comment nous procédons pour les roues galbées construites sur appveyor : https://github.com/Toblerity/Shapely/blob/maint-1.7/appveyor.yml#L84.
Le fait est que les dll sont déjà correctement empaquetées. Je peux les trouver dans le répertoire d'installation de mon programme ( C:\Program Files (x86)\my_program\lib\shapely\DLLs
). Ils semblent être correctement groupés.
Le problème est que shapely ne peut pas les charger correctement. J'ai imprimé le chemin à geos.py:166
et egg_dlls
et wininst_dlls
semblent corrects.
Qu'est-ce qui se passe ?
Le message d'erreur était trompeur : le geos_c.dll
a bien été trouvé, mais ce sont des dépendances que nous ne sommes pas. J'ai dû installer les redistribuables VC de Microsoft pour le faire fonctionner.
Merci!
Commentaire le plus utile
Le message d'erreur était trompeur : le
geos_c.dll
a bien été trouvé, mais ce sont des dépendances que nous ne sommes pas. J'ai dû installer les redistribuables VC de Microsoft pour le faire fonctionner.Merci!