Neu hier und eine Frage zu Modulen

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
rhekeren
User
Beiträge: 4
Registriert: Montag 24. Januar 2022, 13:50

Hallo liebe Python-Programmierer,

mein Name ist Ralf, ich bin 54 Jahre als und neu bei Python. Vor ziemlich langer Zeit habe ich C, Pascal und VisualBasic programmiert, dann aber beruflich nie wieder benötigt.
Es sind also einige wenige Vorkenntnisse vorhanden. Nur Python ist eben vollkommen neu für mich.

Vielleicht kann mir einer bei meiner ersten Frage weiterhelfen?

Ich habe ein kleines Python Programm geschrieben, bei dem ich unter anderem auch das Modul win32print und win32api nutze. Es hat eine Zeit gebraucht, bis ich diese Module nutzen konnte, aber irgendwie habe ich es mit "pip" hinbekommen.
Nun ist es aber so, dass ich in einem neuen Projekt wieder nicht auf diese Module zugreifen kann. Es kommt die Meldung, dass das Modul nicht gefunden werden kann.

Müssen die Module in einem besonderen Pfad liegen oder warum findet mein neues Projekt nicht die bereits installierten Module?
Danke im Voraus und liebe Grüße

Ralf
_______________________________________________________________________________
Aus Platzgründen befindet sich die Signatur auf der Rückseite dieser Nachricht
Benutzeravatar
sparrow
User
Beiträge: 4185
Registriert: Freitag 17. April 2009, 10:28

Das kann man nicht so pauschal sagen.

Wenn man mit pip etwas installiert, wird das in der "Umgebung" installiert. Was die "Umgebung" ist, das kommt drauf an.
Wenn man das "einfach so" in einer Konsole/Eingabeaufforderung tut, wird es in der Regel ins System installiert.
Dann gibt es noch die Möglichkeit das je Projekt zu separieren (Stichwort: Virtuelles Environment / venv)
Und wenn du eine Entwicklungsumgebung verwendest ist es möglich, dass das bereits für die eine solche Umgebung je Projekt einrichtet.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das kommt darauf an, wohin die Module installiert wurden. Wenn die zB mit PyCharm installiert wurden, dann benutzt das automatisch ein virtualenv, eine isolierte Umgebung, nur fuer ein Projekt. Und solltest du mehrere Python-Versionen haben, dann kann das auch die Ursache sein.

Mach mal in beiden Projekten, dem, in dem's geht, und dem neuen, das hier:

Code: Alles auswählen

import sys
print(sys.prefix)
Wenn das nicht gleich ist, hast du dein Antwort.
rhekeren
User
Beiträge: 4
Registriert: Montag 24. Januar 2022, 13:50

Moin Zusammen,

vielen Dank für eure Antworten. Die Ausgabe von sys.prefix ist das jeweilige VENV-Verzeichnis.
Wie kann ich denn die Module so installieren, dass diese nicht in der jeweiligen venv liegen?
Ich habe die Installation in einem Administrator-cmd mit pip gemacht.

Gruß und Danke, Ralf
_______________________________________________________________________________
Aus Platzgründen befindet sich die Signatur auf der Rückseite dieser Nachricht
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@rhekeren,

Die Idee von virtuellen Python-Umgebungen ist ja, dass man in diesen unterschiedliche Pakete installieren kann.

Das folgende gilt für das von Python mitgelieferte venv Paket. (Es gibt andere Möglichkeiten virtuelle Python-Umgebungen anzulegen, die andere Befehle verwendet)
Man aktiviert die jeweilige Umgebung in der Kommandozeile durch:
> <Venv-Pfad>\Scripts\activate

und deaktiviert sie durch:
> deactivate

Jede Umgebung hat auch ihr eigenes pip.exe. Schau dir mal an was in den \Scripts Ordnern der Umgebungen liegt.

Wenn jetzt eine Umgebung aktiviert ist, wirkt pip in dieser Umgebung und die Pakete werden nur in dieser Umgebung installiert. Pakete, die man in mehreren Umgebungen nutzen möchte, muss man in jeder einzeln installieren.

Falls du wirklich ein Paket in der Hauptumgebung installieren möchtest, darf bei der pip-Installation keine virtuelle Umgebung aktiv sein.

Weiter sei noch erwähnt, dass es einige IDEs wie z.B. PyCharm gibt, bei denen die Verwaltung dieser Umgebungen schon integriert ist. Dann gilt das gleiche wie oben, nur dass man halt nicht auf der Kommandozeile arbeitet.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt ja gute Gründe, warum Venvs verwandt werden. Die denen der Windows DLL Hölle entsprechen, falls du dich noch erinnerst.

Statt also Pakete global zu installieren, und dadurch ggf Kollision der Versionen zu bekommen, installiert man die einfach pro venv. Am besten via eines Mechanismus wie requirements.txt oder pipenv, so das sie gleich wohldefiniert sind, und auch andere das Projekt aussetzen können. Ohne den klassischen “bei mir geht’s aber”-Effekt.
rhekeren
User
Beiträge: 4
Registriert: Montag 24. Januar 2022, 13:50

Danke euch. Jetzt wird's für mich verständlicher.
_______________________________________________________________________________
Aus Platzgründen befindet sich die Signatur auf der Rückseite dieser Nachricht
Antworten