Shapely: Kann nicht mit pipenv und cx_freeze packen: OSError: lib geos_c.dll konnte nicht gefunden oder eine seiner Varianten geladen werden []

Erstellt am 16. Sept. 2020  ·  3Kommentare  ·  Quelle: Toblerity/Shapely

Erwartetes Verhalten und tatsächliches Verhalten.

Wenn ich mein python3.8-Programm mit cx_freeze in eine msi einfriere, funktioniert die msi auf dem Computer, auf dem sie erstellt wurde, aber nicht auf anderen Hosts.
Die Fehlermeldung lautet: OSError: Could not find lib geos_c.dll or load any of its variants [].

Schritte zum Reproduzieren des Problems.

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)

Betriebssystem

Windows 10

Formschöne Fassung und Provenienz

1.7.1 von PyPI mit pipenv installiert

invalid

Hilfreichster Kommentar

Die Fehlermeldung war irreführend: Das geos_c.dll wurde tatsächlich gefunden, aber seine Abhängigkeiten sind wir nicht. Ich musste Microsofts VC Redistributables installieren, damit es funktioniert.
Danke!

Alle 3 Kommentare

@ypicard Es tut mir leid wegen der Probleme, aber das ist kein formschönes Problem. Sie müssen herausfinden, wie Sie eine kompatible geos_c.dll in Ihr Paket aufnehmen können. So machen wir es für formschöne Räder, die auf Appveyor basieren: https://github.com/Toblerity/Shapely/blob/maint-1.7/appveyor.yml#L84.

Die Sache ist, dass die DLLs bereits korrekt gepackt sind. Ich finde sie im Installationsverzeichnis meines Programms ( C:\Program Files (x86)\my_program\lib\shapely\DLLs ). Sie scheinen richtig gebündelt zu sein.
Das Problem ist, dass Shapely sie nicht richtig laden kann. Ich habe den Pfad bei geos.py:166 gedruckt und sowohl egg_dlls als auch wininst_dlls sehen korrekt aus.
Was ist los ?

Die Fehlermeldung war irreführend: Das geos_c.dll wurde tatsächlich gefunden, aber seine Abhängigkeiten sind wir nicht. Ich musste Microsofts VC Redistributables installieren, damit es funktioniert.
Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

LostFan123 picture LostFan123  ·  5Kommentare

jGaboardi picture jGaboardi  ·  5Kommentare

ispmarin picture ispmarin  ·  3Kommentare

mromanie picture mromanie  ·  3Kommentare

benediktbrandt picture benediktbrandt  ·  3Kommentare