Übersicht der "enviroments" / beste Vorgehensweise

Probleme bei der Installation?
Antworten
theo8
User
Beiträge: 3
Registriert: Samstag 27. Januar 2024, 23:01

Hallo!

Ich möchte programmieren lernen und habe nun einen Python Kurs in udemy durchgearbeitet. Ein erstes kleines Programm habe ich für mich auch schon geschrieben. ;-)

Worauf ich aber keine Antwort habe:
Wie setzt man das beste/empfehlenswerte Setup auf. Und zwar im Hinblick auf die Module.
Ich habe mit Anaconda (Jupyter Notebooks) und pycharm (Linux Mint) gearbeitet.
Damit komme ich gut zurecht, bis ich ein Modul verwenden möchte, das noch nicht installiert ist (Bsp: pyperclip oder tkinter [funktioniert in pycharm nicht]).
conda install findet z.B. pyperclip nicht.

Gibt es eine Anleitung, wie man das verwenden sollte?
Ich finde es verwirrend einmal über pip und ein anderes Mal via conda Module zu installieren.
Vor allem ist es dann sehr sicher, dass die Programme auf einem anderen Rechner dann nicht funktionieren werden.

Danke!

Theo
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Ich verwende kein Jupyter Notebook.
Für den Standardinterpreter gilt: requirements.txt anlegen und Abhängigkeiten dort reinschreiben. Die Datei gehört zum Projekt.

Wo auch immer dann entwickelt oder ausgeführt wird, ein venv anlegen und dort die requirements mit pip installieren.
Pycharm legt wahrscheinlich eh schon für jedes Projekt ein venv an.
Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

Die requirements.txt kann man sich in dem venv (nachdem man dort alles installiert hat was man benötigt) auch durch pip erzeugen lassen. Manch ein Paket zieht bei der Installation ja noch einen Rattenschwanz an weiteren notwendigen Paketen nach sich... 'weasyprint' zum Beispiel (benötigt neben anderen Modulen noch 'cffi', welches wiederum noch 'pycparser' mitbringt), ganz im Gegensatz zu 'dominate' welches ganz alleine im Projektverzeichnis landet
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@grubenfox: Wenn du "freeze" meinst, halte ich das Argument mit den in Abhängigkeit installierten Paketen eher für eins auf der "mach das nicht"-Seite.

@theo8: Hintergrund ist die Option "freeze" mit der pip die installierten Pakete ausgeben kann. Ich würde die requirements.txt damit aber nicht erstellen lassen.
Angenommen du würdest ein Projekt beginnen, welches das Webframework Django verwendet, dann würdest du das in die requirement.txt schreiben. Mit der gewünschten Version. Zum Beispiel weil du immer die aktuellste Version von 4.2 haben möchtes, weil das ein long term release Ist.
Django bringt aber weitere Abbgigkeiten mit. Und die definieren sie in ihrem Paket selbst. Die unnötigerweise in die requirements.txt aufzunehmen würde ich als falsch ansehen. Diese Abhängigkeiten können sich ändern.
Von daher: Nicht machen. In die requirements.txt gehört nur, was du im Code selbst verwendest bzw. installieren musst, damit das Projekt läuft - nicht die Abhängigkeiten, die durch die Pakete definiert sind und automatisch installiert werden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@sparrow: das sehe ich anders. Mindestens mal ist das Vorgehen hier Kontext abhängig: wenn ich die von dir erwähnte Webapp auf einen Hoster deployen will, ist mir die absolut gleiche Versionsmenge wichtig, denn ich will nicht unabsichtlich in die Bedrouille kommen, das kleine Unterschiede große Wirkung entfalten.

Du hast natürlich recht, das ein solches absolutes festzurren auch Nachteile haben kann, weil zb bugfixes oder neue Features ggf nicht zur Verfügung stehen.

Die Antwort scheint heutzutage in der Aufteilung in direkte, manuell spezifizierte Abhängigkeiten, und ein getrenntes Tracking der gesamten Versionsmenge zu stecken. Daher würde ich auch zu pyproject.toml (manuell gewartet) und poetry zum arbeiten mit dem venv und erzeugen des poetry.lock, welches die gepinnten Versionen automatisch enthält, raten.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich habe mit Anaconda (Jupyter Notebooks) und pycharm (Linux Mint) gearbeitet.
Unter Anaconda nutzt man i.d.R. Conda zum Anlegen von venv, unter Python (also das was z.B. bei Mint mitinstalliert wird, pip. Conda ist eine eigenständige Python-Distribution mit eigenen Tools.

Manche IDE (wie Pycharm) legen für neue Projekt direkt ein venv an - da ich (auch) kein Pycharm verwende kann ich dir da auch leider nicht mehr sagen.

Um tkinter unter Linux Mint zu installieren sollte es eigentlich reichen, dass Paket `python3-tk` über die Paketverwaltung zu installieren.

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

Hallo,

was kommt den in PyCharm für eine Meldung, wenn du `pyperclip` installieren willst? Bei mir installiert es die Version 1.8.2 problemlos und `tkinter` ist von Grund auf mit dabei.
Welche Interpreter-Version hast du für dein Projekt festgelegt?
Bei mir sieht das so aus:
Bild


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
theo8
User
Beiträge: 3
Registriert: Samstag 27. Januar 2024, 23:01

Hallo!

Vielen Dank für eure Antworten!
Ich muss einfach auch noch weiter üben/arbeiten, um in die "Probleme" reinzulaufen und sie zu lösen. ;-)
pyperclip konnte ich in pycharm installieren, unter conda geht es nicht "direkt". Gibt aber Anleitungen dazu.

Gruß
Theo
theo8
User
Beiträge: 3
Registriert: Samstag 27. Januar 2024, 23:01

Hallo!

Ich habe jetzt ein weiteres kleines Hilfstool erstellt (liest aus einem Ordner die jpg Files und gibt mir dazu die w3w Adresse aus).
Dafür verwende ich exif, what3words und pyclip (damit ich die Links in der Zwischenablage habe).
Als IDE verwende ich PyCharm.
Die Python Datei ist in einem Unterordner in einem "Projektordner". Dazu gibt es auch einen "venv" Ordner. Ich nehme an, da sind die Module enthalten.
In Pycharm funktioniert alles.
Aber wie kann ich das Script auch im normalen terminal laufen lassen (Linux Mint 21.3)? Da erhalte ich die Meldung "ModuleNotFoundError: No module named 'exif'".
Wie kann ich python3 im terminal mitteilen dass die venv verwendet werden soll (das ist doch das Problem oder?)?

Danke!

Theo
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@theo8: Man muss das venv aktivieren oder das Programm mit dem Python aus dem venv-Verzeichnis starten. Siehe die Dokumentation vom `venv`-Modul in der Python-Dokumentation.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten