Programm nutzt venv: wohin gehören dann die Programmdateien?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bb1898
User
Beiträge: 216
Registriert: Mittwoch 12. Juli 2006, 14:28

Kommt mir vor wie eine ziemlich blöde Frage, nur finde ich so gut wie nichts dazu. Wenn mein Python-Programm die Python-Version nutzt, die ich in C:\program files\python312 habe, mit den Moduln im dort vorhandenen Unterverzeichnis site-packages (also das, was unter Windows einem "System-Python" am nächsten kommt), dann ist klar, dass ich mein Programm ganz sicher nicht in diesen Verzeichnisbaum stecke, sondern in ein Verzeichnis, in dem erst mal ich alle Rechte habe, ohne Administrator zu spielen, und das zweitens inhaltlich passt.

Nicht klar ist mir, wie das auszusehen hat, wenn ich für mein Programm eine virtuelle Umgebung einrichte, weil es zum Beispiel Pakete braucht, die sich mit dem Rest nicht vertragen (gilt im konkreten Fall für PyQt6 einerseits und PySide6 andererseits, so viel ich weiß). Dass die Programmdateien nicht in das venv-Verzeichnis gehören, habe ich irgendwo gelesen, finde es aber gerade nicht wieder. Umgekehrt das venv in ein Unterverzeichnis des Programmverzeichnisses zu stecken, leuchtet mir auch nicht ein, denn vielleicht kann ich ja das gleiche venv für verschiedene Programme brauchen. Also auch hier beides unabhängig voneinander halten?

Danke für guten Rat!
Benutzeravatar
kbr
User
Beiträge: 1501
Registriert: Mittwoch 15. Oktober 2008, 09:27

Ein virtuelles Environment bestimmt lediglich, wo sich das Python-Executable befindet und von wo die site-packages geladen werden. Wo sich deine Projekt-Dateien befinden ist davon völlig unabhängig. Ich würde venvs nicht mehrfach verwenden; ein Projekt - ein venv.
bb1898
User
Beiträge: 216
Registriert: Mittwoch 12. Juli 2006, 14:28

kbr hat geschrieben: Dienstag 27. August 2024, 20:40 Ein virtuelles Environment bestimmt lediglich, wo sich das Python-Executable befindet und von wo die site-packages geladen werden. Wo sich deine Projekt-Dateien befinden ist davon völlig unabhängig. Ich würde venvs nicht mehrfach verwenden; ein Projekt - ein venv.
Danke, dann wäre das geklärt, ich kann die Programme dort unterbringen, wo sie auch ohne venv hinkommen. Muss mich noch etwas schlauer machen, was die richtige Shebang-Zeile betrifft, aber das findet sich, glaube ich, in der Dokumentation.
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

kbr hat geschrieben: Dienstag 27. August 2024, 20:40 Ein virtuelles Environment bestimmt lediglich, wo sich das Python-Executable befindet und von wo die site-packages geladen werden. Wo sich deine Projekt-Dateien befinden ist davon völlig unabhängig. Ich würde venvs nicht mehrfach verwenden; ein Projekt - ein venv.
ich weiß nicht so recht... oder verstehe was falsch... dann hat man z.B. fünf Projekte die SQLAlchemy nutzen (alle dieselbe Version!) und dann installiert man sich das fünf Mal in fünf venvs?
(Wenn man ungünstigerweise verschiedene Versionen eines Paketes nutzen muss, dann natürlich auch verschiedene venvs.)
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Ja, das macht man in der Regel so.
Benutzeravatar
Dennis89
User
Beiträge: 1503
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

meist hat man ja doch noch die ein oder andere Bibliothek und wenn man die Projekte trennt, ist auch die „requierments.txt“ ordentlich.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@grubenfox: Dann wachsen diese 5 Projekte und dann kommt eine SQLAlchemy-Version raus bei der deutlichere Änderungen am Code nötig sind, der die benutzt. Dann muss man das an allem 5 Projekten *gleichzeitig* ändern. Oder jedes Projekt hat seine eigene SQLAlchemy-Version und man kann die nacheinander auf die neue Version ziehen, während die anderen 4 Projekte weiterhin funktionieren.

Es ist auch einfacher den Überblick zu behalten, denn wenn sich mehrere Projekte ein venv teilen, müsste man bei jeder Änderung am venv überlegen, oder irgendwo extra dokumentieren, welche Projekte von der Änderung betroffen sind. Umgekehrt hat man ja oft eine requirements.txt im Projekt. Die müsste dann für alle Projekte gleich sein, die das venv benutzen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten