Updaten von venvs

Probleme bei der Installation?
Antworten
nezzcarth
User
Beiträge: 825
Registriert: Samstag 16. April 2011, 12:47

Samstag 30. November 2019, 11:37

Hallo :)

ich habe eine größere Anzahl von Python virtualenvironments, die ich im Moment mit 'pew' verwalte. Als Grundlage dient stets der Python-Interpreter meines Linux (vielleicht ist das auch schon der Fehler). Wenn, wie letztens, ein Versionsnummernsprung stattfindet, sind die venvs nicht mehr verwendbar. (Und in der Regel vergesse ich auch zuvor, zumindest vorab requirements.txts für jede Umgebung anzulegen). Was ich gerne hätte, wäre, die installierten Pakete in den venvs intakt zu lassen und nur den Interpreter zu aktualisieren.

Wahrscheinlich könnte ich die venvs mit z.B. 'pythonz' und anpassen des Interpreters/der Symlinks wieder reparieren, die Abhängigkeiten in eine requirements.txt schreiben und dann die Umgebung mit dem neuen Python wieder einrichten. Für mehr als ein paar Umgebungen ist mir das aber zu aufwendig.

Ich habe den Eindruck, dass es dafür noch keine allgemein bekannte Lösung gibt, aber wollte mal hören, ob hier vielleicht jemand eine Idee hat. Vielleicht muss ich auch noch mal einen Workflow in der Hinsicht insgesamt überdenken. Wie macht ihr das?

Danke.
__deets__
User
Beiträge: 6861
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 30. November 2019, 12:08

Ich würde niemals versuchen ein venv wieder in Form zu massieren. Das ist Wegwerfware. Dieser Tage benutze ich pipenv um die Paketliste meiner venvs gleich vernünftig zu erstellen, und die dann reproduzieren zu können. Pipenv ist nicht perfekt, aber funktioniert für meine Anwendung ziemlich gut.

Und dann gibt’s auch noch pip freeze, wenn du ein bestehendes venv in eine requirements.txt wandeln willst.
Benutzeravatar
__blackjack__
User
Beiträge: 4681
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 30. November 2019, 12:12

@nezzcarth: Ich hatte noch nie einen Versionsnummernsprung bei Python. Hatte ich Glück oder verwendest Du ein „rolling release“-Distribution? Vielleicht ist das ja schon der ”Fehler”. 😉

Ich sehe venvs als etwas ”flüchtiges” an. Man kann die ja nicht einfach kopieren also sollte man die so gestalten, dass sie einfach (wieder)herstellbar sind. Zum Beispiel wenn man das Projekt klont um beispielsweise etwas zu experimentieren, oder etwas entwickelt was etwas länger dauert was man später wieder in das ”Hauptrepository” mergen möchte. Und das bedeutet eine `setup.py` oder eine `requirements.txt` oder `Pipfile`/`Pipfile.lock` um schnell und einfach ein neues venv hochziehen zu können. Zudem dient das ja auch der Dokumentation wovon das Projekt so alles abhängig ist. Klar kann man wenn man das woanders neu aufsetzt auch in alle Dateien schauen oder solange einzelne Packages nachinstallieren bis es keine Importfehler mehr gibt, aber das in einem Befehl abzufrühstücken ist schon irgendwie schöner.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
nezzcarth
User
Beiträge: 825
Registriert: Samstag 16. April 2011, 12:47

Samstag 30. November 2019, 12:58

Stimmt, ich hätte vielleicht dazu sagen sollen, dass ich auf meinen Rechnern Rolling Release Distributionen verwende und zwar auch schon so lange (15+ Jahre), dass ich gar nicht mehr in der Lage wäre, da Probleme zusehen ;)

So wie du es beschreibst, wäre also eher mein Arbeitsablauf das Problem. Für meine größeren "ernsten" Projekte habe ich es so wie du sagst, d.h. eine ordentliche Ordnerstruktur mit requirements.txt, setup.py usw. Das meiste, was ich (privat) in Python schreibe, sind aber eher kurze Einzel-Skripte, die selten über 750 Zeilen lang sind. Und wenn ich dafür externe Pakete benötige, lege ich in der Regel dafür ein neues venv an. Die Skripte haben zwar einen eigenen Unterordner, aber in der Regel keine requirements.txt o.Ä.. So kommt jedenfalls dieser Zoo von ca. 100 venvs mit teilweise unterschiedlichen Python-Versionen zusammen. Ich denke, das wird mich auch etwas Disziplin kosten, davon weg zu kommen...

Das wäre dann vielleicht die Lösung für die Zukunft. Aber wie ich die ganzen alten Venvs wieder lauffähig bekomme, ist dann noch offen. Notfalls könnte ich wohl versuchen, dafür ein Skript zu basteln, wenn es dafür keine bessere Lösung gibt.
Benutzeravatar
__blackjack__
User
Beiträge: 4681
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 30. November 2019, 15:27

__deets__ hat ja Pipenv schon erwähnt. Da wird ja automatisch alles was man damit installiert aufgezeichnet, so dass man nicht extra an das pflegen einer `requirements.txt` denken muss.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
nezzcarth
User
Beiträge: 825
Registriert: Samstag 16. April 2011, 12:47

Samstag 30. November 2019, 15:34

Oh, __deets__ Antwort hatte ich übersehen, sorry :( Ja, pip freeze kenne ich, nur denke ich in diesen Fällen immer erst daran, wenn es schon zu spät ist (also das venv nicht mehr funktioniert). Aber pipenv klingt gut, das versuche ich mal. Vielleicht passt das für meinen Zwei besser als pew.

Danke euch beiden für die Antworten.
Antworten