wie installiere ich py_expression_eval in venv

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Irgendwann muss ich ja dieses Updateproblem lösen.
Ich habe jetzt mein komplettes Projekt von uberspace runtergeladen und wollte es lokal updaten (und dabei hoffentlich das JSON Problem lösen) - und schon habe ich ein neues Problem. Der Befehl runserver bringt wieder eine riesige Latte an Fehlermeldungen. Ich will es euch erstmal ersparen, mir das zu übersetzen und versuche mich zunächst an einem Fehler, den ich verorten kann:

Code: Alles auswählen

ModuleNotFoundError: No module named 'py_expression_eval'
Mit venv kann ich (natürlich auch) nich wirklich umgehen, vermute aber, dass hier das Problem liegt.
py_expression_eval habe ich natürlich lokal installiert und bekomme das auch bestätigt:

Code: Alles auswählen

PS C:\WINDOWS\system32> pip install py_expression_eval
Requirement already satisfied: py_expression_eval in c:\users\pit\appdata\local\programs\python\python310\lib\site-packages (0.3.14)
.. aber wenn ich das richtig sehe, habe ich mit dem Projekt auch den Ordner "venv" runtergeladen und da ist besagte Datei nicht in "lib" "site-packages" - da müsste es aber drin sein - oder sehe ich das mal wieder ganz falsch. Falls meine Vermutung stimmt: Wie bekomme ich die Bibliothek (das ist doch eine?) da rein?
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Pitwheazle hat geschrieben: Sonntag 2. Juli 2023, 12:20 Mit venv kann ich (natürlich auch) nich wirklich umgehen, vermute aber, dass hier das Problem liegt.
Den Umstand kannst du ändern, indem du dich in venv einarbeitet.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Kannst du mir da schon mal den Hinweis geben,ob ich mit meiner Vermutung richtig liege? Mit meiner Begriffsstutzigkeit wird mich das ein Weilchen beschäftigen. :)
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ja, du liegst richtig.

Von prinzipiellen Vorgehen her: venv unter Win erstellen, Daten deiner Applikation - aber nicht die sonstigen Daten des venvs! - vom Server auf Win kopieren, venv aktivieren, alles notwendige mit pip im venv installieren. Dann sollte es auch lokal laufen.

Ein venv nutzen ist einfach, weil mit erstmal nur drei Sachen wissen muss: einrichten, aktivieren, deaktivieren.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vielleicht noch mal extra betont: venvs sind nicht kopierbar. Nicht lokal auf dem Rechner und schon gar nicht von anderen Rechnern. Da sind absolute Pfadangaben drin. Wenn man ein Projekt von einem Ort an einen anderen kopiert, dann sollte man das ohne den Ordner machen wo das venv drin ist, oder den nach dem kopieren am besten gleich löschen. Der Ordner und dessen Inhalt gehört deswegen beispielsweise auch nicht mit in eine Versionsverwaltung.

Üblicherweise hat man im Projekt eine Datei mit dem Namen ``requirements.txt``, wo alle Abhängigkeiten in einem passenden Format für ``pip`` drin stehen, damit man nach erstellen und aktivieren eines neuen venvs, alles nötige mit ``pip -r requirements.txt`` installieren kann. Wenn man so eine Datei nicht hat, aber ein venv wo alle Abhängigkeiten installiert sind, kann man sich so eine Datei mit ``pip freeze > requirements.txt`` erstellen. Da sind dann alle Packagenamen drin, die in dem venv installiert sind, plus die exakte Version von jedem Package, so das man diesen Zustand in einem anderen venv reproduzieren kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ach, ich liebe Euch! Was wäre ich ohne Euch!
Ich habe mich nochmal ein Wenig mit venv beschäftigt. Sagt mir, wenn was falsch ist.
  • Virtual Environment sollte man nicht mit einer virtuellen Maschine verwechseln.
    Mit dem venv kann man verschiedene Python Projekt nebeneinander betreiben und dabei auf verschiedene Python Versionen und und individuell Bibliotheken installieren.
    Wenn ich kein venv benutze, dann greift mein Projekt auf die (voreingestellte - falls es mehrere gibt) Python Version in meinem Windows zu.
    Dort sind auch die von mir installierten Bibliotheken zu finden.
    Wenn ich in meinem Projekt kein venv installiert habe, wird python und die Bibliotheken so genutzt wie sie auf meinem Computer vorliegen.
    Wenn ich auf dem uber Server ein venv benutze, macht es Sinn, dieses baugleich lokal "nachzubauen".
Und jetzt kommt die spannendste Frage:
Da ich das mit dem venv bisher nicht so wichtig gesehen habe und es wahrscheinlich auch nicht eingerichtet habe, kann ich den runtergeladenen venv Ordner löschen und gut ist (Das habe ich ja schon gemacht (@__blackjack__) und siehe da, mein Projekt funktioniert auch lokal.
Die Frage: Wie bekomme ich raus, ob ich venv benutze?
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Ein vorhandenes venv wird benutzt wenn man es aktiviert. Also entweder über ein entsprechendes Skript im ``bin/``-Ordner des venv — da sind standardmässig schon welche für verschiedene Betriebssysteme und Shells. Oder in dem man das Programm über den Python-Interpreter in diesem Ordner startet. Oder in dem man ein anderes Python-Programm in diesem Ordner ausführt, weil das in der ersten Zeile den Python-Interpreter vom venv zu stehen hat. (Ich vermute mal stark das unter Windows dazu die Dateiendung *.py mit einer ``py.exe`` statt einem konkreten Python-Interpreter verknüpft sein muss, damit das funktioniert.)

In den Fällen wo man nicht das Aktivierungsshellskript wie vorgesehen verwendet, sollte das venv nur für das ausgeführte Programm aktiv sein, solange das läuft. Mit dem Aktivierungsskript ist das venv in der Shell/dem Terminal solange aktiv bis man ``deactivate`` eingibt. Zumindest unter Unix/Linux sollte sich auch der Prompt ändern. Standardmässig steht da noch "(venv)" als Präfix davor. Keine Ahnung wie das unter Windows aussieht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

weil ich gerade unter Windows arbeite:

Code: Alles auswählen

C:\Users\Dennis\Documents>cd venv

C:\Users\Dennis\Documents\venv>Scripts\activate.bat

(venv) C:\Users\Dennis\Documents\venv>deactivate
C:\Users\Dennis\Documents\venv>
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ergänzung zu Windows: in der Powershell kann es vorkommen, das beim Aktivieren des Venv die Sicherheitsmaßnahmen von Windows das blocken. Kann aber in der Powershell (dauerhaft) deaktivieren, also das geblockt wird. Den Befehl muss ich aber auch jedesmal googlen.

Gruß, noisefloor
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Ergänzung zur Ergänzung: habe das in der Powershell getestet und wie man die Richtlinen ändert findet man gleich in der Fehlermeldung der Powershell. Es wird auf diese Seite verwiesen:
https://learn.microsoft.com/de-de/power ... rshell-7.3

Ich habe das mal durchgespielt, die Richtlinien geändert und wieder rückgängig gemacht. Das aktivieren der Entwicklungsumgebung läuft in der Powershell über die *.ps1 - Datei und nicht wie zuvor gezeigt über die *.bat-Datei. Für das Ändern der Richtlinien muss man die Powershell als Admin öffnen.

Code: Alles auswählen

PS C:\Users\Dennis\Documents> venv\Scripts\Activate.ps1
venv\Scripts\Activate.ps1 : Die Datei "C:\Users\Dennis\Documents\venv\Scripts\Activate.ps1" kann nicht geladen werden,
da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter
"about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
+ venv\Scripts\Activate.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
    
PS C:\Users\Dennis\Documents> Get-ExecutionPolicy -Scope CurrentUser
Undefined

PS C:\Users\Dennis\Documents> Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser

Ausführungsrichtlinie ändern
Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführungsrichtlinie
 ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" unter
"https:/go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt. Möchten Sie die
Ausführungsrichtlinie ändern?
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "N"): j

PS C:\Users\Dennis\Documents> venv\Scripts\Activate.ps1

Möchten Sie Software dieses nicht vertrauenswürdigen Herausgebers ausführen?
Die Datei "C:\Users\Dennis\Documents\venv\Scripts\Activate.ps1" wurde von "CN=Python Software Foundation, O=Python
Software Foundation, L=Beaverton, S=Oregon, C=US" veröffentlicht und gilt auf Ihrem System als nicht vertrauenswürdig.
Führen Sie ausschließlich Skripts vertrauenswürdiger Herausgeber aus.
[E] Noch nie ausgeführt  [N] Nicht ausführen  [M] Einmal ausführen  [A] Immer ausführen  [?] Hilfe (Standard ist "N"): M

(venv) PS C:\Users\Dennis\Documents> Deactivate
PS C:\Users\Dennis\Documents> Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Ausführungsrichtlinie ändern
Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführungsrichtlinie
 ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" unter
"https:/go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt. Möchten Sie die
Ausführungsrichtlinie ändern?
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "N"): j

PS C:\Users\Dennis\Documents> venv\Scripts\Activate.ps1
venv\Scripts\Activate.ps1 : Die Datei "C:\Users\Dennis\Documents\venv\Scripts\Activate.ps1" kann nicht geladen werden,
da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter
"about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
+ venv\Scripts\Activate.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
    
PS C:\Users\Dennis\Documents>
Das war jetzt nur zum testen, wenn das wirklich benötigt wird sollte man die ganze verlinkte Seite durchlesen und dann entscheiden in wie weit man die Richtlinie ändert und was man bei der Nachfrage zur Skriptausführung alles zulässt.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Pitwheazle hat geschrieben: Montag 3. Juli 2023, 15:44 siehe da, mein Projekt funktioniert auch lokal
Das ist natürlich erstmal gut, kann aber auch trügerisch sein, wenn am Ende etwas lokal funktioniert, aber auf dem Server nicht (mehr).
Ich würde nochmal die Empfehlung unterstreichen und dir eine requirements.txt vom venv des Servers bauen lassen und dann lokal dasselbe venv nachbauen.
So kannst du sicher sein, dass auch alle bekannten Voraussetzungen durch dieselben Versionen erfüllt werden, und aber auch nicht mehr als diese.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Auch das habe ich jetzt zum Laufen bekommen: ich habe einfach mal vorausgesetzt, dass ich keine virtual Environment genutzt habe und meine Änderungen funktionieren auch im Internet. Mit dem virtuellen Environment werde ich mich dann später sicher nochmal beschäftigen.
Antworten