Shapely: Impossible d'empaqueter avec pipenv et cx_freeze : OSError : Impossible de trouver la bibliothèque geos_c.dll ou de charger l'une de ses variantes []

Créé le 16 sept. 2020  ·  3Commentaires  ·  Source: Toblerity/Shapely

Comportement attendu et comportement réel.

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 [].

Étapes pour reproduire le problème.

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)

Système opérateur

Windows 10

Version galbée et provenance

1.7.1 installé à partir de PyPI en utilisant pipenv

invalid

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!

Tous les 3 commentaires

@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!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

LostFan123 picture LostFan123  ·  3Commentaires

akadouri picture akadouri  ·  4Commentaires

sgillies picture sgillies  ·  6Commentaires

jGaboardi picture jGaboardi  ·  5Commentaires

MarkWieczorek picture MarkWieczorek  ·  4Commentaires