Wie mache ich eine ausführbare Datei für Linux

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.
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Hallo zusammen, ich habe mal eine Frage.
Ich habe 1 Projekt in Python unter pycharm und will die ja nicht immer über pycharm starten sondern direkt vom desktop (Schreibtisch) aus also wie bei Windows unter exe .

Wie mache ich sowas über Linux in Python ?

Lg
Benutzeravatar
pillmuncher
User
Beiträge: 1527
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Angenommen, dein Modul heißt foo.py.

Du fügst du eine hashbang line als erste Zeile in foo.py ein:

Code: Alles auswählen

#!/usr/bin/env python3
...
Danach machst du foo.py ausführbar:

Code: Alles auswählen

$ chmod u+x foo.py
Danach kannst du foo.py ausführen:

Code: Alles auswählen

$ ./foo.py
Der Dateiname braucht übrigens nur auf .py zu enden, wenn das Modul von anderen Python-Modulen importiert werden soll. Wenn es ein komplett eigenständiges Programm sein soll, kannst du das .py auch weglassen.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
noisefloor
User
Beiträge: 4156
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

... und nicht vergessen: wenn das Python-Programm ein Skript ist, was einfach durchläuft und dabei was auch immer macht, siehst du kurz (oder sehr kurz) das Terminal-Fenster, dass sich automatisch wieder schließt, wenn das Skript beendet ist. Was auch unter Win nicht anders ist.

Gruß, noisefloor
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

@ pillmuncher danke erstmal für die Mühe .
Was ich noch nicht verstanden habe müssen die 3 Zeilen die Du reingesetzt hast untereinander schreiben im Kopf des Scripts ?

Kam da grade bisschen durcheinander 😇
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

noisefloor hat geschrieben: Montag 17. März 2025, 20:50 ... und nicht vergessen: wenn das Python-Programm ein Skript ist, was einfach durchläuft und dabei was auch immer macht, siehst du kurz (oder sehr kurz) das Terminal-Fenster, dass sich automatisch wieder schließt, wenn das Skript beendet ist. Was auch unter Win nicht anders ist.

Gruß, noisefloor
Werde ich Morgen mal testen .
Benutzeravatar
pillmuncher
User
Beiträge: 1527
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

TorstenVoelker hat geschrieben: Montag 17. März 2025, 20:55 müssen die 3 Zeilen die Du reingesetzt hast untereinander schreiben im Kopf des Scripts ?
Nein. Die erste Zeile muss in das Python Script, die anderen sind Shell Commands. Die musst du im Terminal ausführen. Das $ symbolisiert das Prompt, das sollst du nicht eingeben, aber alles, was in der Zeile danach kommt.
In specifications, Murphy's Law supersedes Ohm's.
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Code: Alles auswählen


chmod u+x foo.py


Also nur das .

Danke für die Hilfe .
Benutzeravatar
Dennis89
User
Beiträge: 1506
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

genau, du musst dich aber in dem Ordner befinden, in dem die Datei `foo.py` liegt. Ansonsten den gesamten Pfad angeben, Beispiel:

Code: Alles auswählen

chmod u+x /home/beispielname/skripte/foo.py
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und wenn man etwas anklickbares auf dem Desktop haben möchte, dann ist das unter Linux in der Regel eine *.desktop-Datei. Da kann man dann den Programmnamen, ein Icon, das Programm, wie das gestartet werden soll usw. eintragen. https://wiki.ubuntuusers.de/.desktop-Dateien/
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Danke für den ganzen Input , sehr komplex das zu behalten .

Hatte vorher eine Windows System und nach vielen Problemen mit Windows nach Linux gewechselt . Ist schon ein wenig komplexer 😇😇
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Darf ich mal fragen was die foo.py ist ? Das bringt mich grade bisschen durcheinander.
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TorstenVoelker: Das ist die Datei die Du ausführbar machen möchtest. Wir wissen ja nicht wie die bei Dir konkret heisst, ausser das es eine Python-Datei ist, also ziemlich wahrscheinlich die Endung ".py" hat. Und `foo` ist ein typischer Name für eine metasyntaktische Variable. Sprachübergreifend. Python-typischere Namen wären `spam` und `eggs`.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Ah ok, meine Datei heißt Main.py mit einer Connect.py Wo ich die MySQL Verbindung drin gespeichert habe um das nicht immer neu zu schreiben .
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Ich habe es grade mal Probiert mit meiner Schülerliste .

Aber wenn ich die Ausführen möchte kommt.


Code: Alles auswählen

orsten@torsten-System-Product-Name:~/Schreibtisch/Schülerliste$ ./main.py
Traceback (most recent call last):
  File "/home/torsten/Schreibtisch/Schülerliste/./main.py", line 6, in <module>
    import mysql
ModuleNotFoundError: No module named 'mysql'
torsten@torsten-System-Product-Name:~/Schreibtisch/Schülerliste$ 


:roll:
Sirius3
User
Beiträge: 18225
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du ein virtuelles Environment benutzt, mußt Du natürlich den Pfad zum Python Deines venvs angeben:

Code: Alles auswählen

#!/pfad/zu/venv/bin/python3
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Könntest Du mir das genauer erklären? Verstehe es nicht ganz .
Benutzeravatar
pillmuncher
User
Beiträge: 1527
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

TorstenVoelker hat geschrieben: Mittwoch 19. März 2025, 13:22 Könntest Du mir das genauer erklären? Verstehe es nicht ganz .
Unter Linux gibt es inzwischen einige Programme, die Python verwenden. Je nach Linux-Distro, können das unterschiedliche Python-Versionen sein. Die jeweilige Distro entscheidet sich meistens dafür, diese Version für alle Programme der Distro festzulegen. Je jachdem welche Programme dann über den Paket-Manager der Distro man auf seinem System installiert, werden dann evtl. benötigte Python-Module ebenfalls installiert. Soweit, so einfach.

Wenn du allerdings selbst Python-Programme schreibst, möchtest du möglicherweise eine andere Python-Version als die der Distro verwenden, und/oder andere Versionen der Python-Pakete, die von der Distro installiert werden. Wenn du einfach die von dir gewünschten Pakete im System installierst, könnte das dazu führen, dass manche Programme aus der Distro nicht mehr funktionieren. Es kann auch sein, dass du mehrere Python-Programme schreibst, und dazu unterschiedliche Python- oder Paket-Versionen verwenden möchtest. Dazu wurden virtuelle Environments eingfeführt: Eigenständige Python-Umgebungen, die eine bestimmte Python-Version haben und eigenständige Bibliotheken von Python-Paketen. Jede dieser Umgebungen lent in einem eigenen Verzeichnis und hat einen eigenen Pfad zur verwendeten Python-Version.

Mehr zu dem Thema findest du hier: https://docs.python.org/3/library/venv.html
In specifications, Murphy's Law supersedes Ohm's.
TorstenVoelker
User
Beiträge: 139
Registriert: Mittwoch 5. Februar 2025, 12:55

Danke für das lange Statement, aber ich verstehe Bahnhof 🤣 .

Wie ich heraus lesen konnte bei dem Fehler ist das er MySQL nicht findet . Also das Modul . Jetzt frage ich mich wie ich das interpretieren kann das es mit einbezogen wird .

Ich finde ja super das ihr mir Ratschläge gibt bzw. sagt was genau ist und und aber da ich es zum ersten Mal mache das ausführen ist das für mich ein neues Kapitel .

Den link habe ich angeklickt und schnell bemerkt, dass es komplett auf Englisch ist, da ich in Englisch nicht so gut bin ist das für mich noch komplexer das zu verstehen .
Benutzeravatar
pillmuncher
User
Beiträge: 1527
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

TorstenVoelker hat geschrieben: Mittwoch 19. März 2025, 14:23 Den link habe ich angeklickt und schnell bemerkt, dass es komplett auf Englisch ist, da ich in Englisch nicht so gut bin ist das für mich noch komplexer das zu verstehen .
Dafür hat der Liebe Gott Google Translate erfunden. Nicht ideal, aber besser als nichts. Andererseits könntest du auch einfach Google befragen. Was anderes könnte ich an der Stelle auch nicht fpr diech tun, weil ich keine deutschsprachige Seite kenne, die das erklärt.

Zum Thema virtuelle Umgebungen: Auf Ubuntu 22.04 LTS ist standardmäßig Python 3.10 installiert, auf Debian 12 ist es 3.11. Python als Programmiersprache wird permanent weiterentwickelt. Wenn du neue Sprach-Features verwenden willst, die in der Python-Version deiner Linux-Distro nicht verfügbar sind, dann kannst du nicht einfach das Python deines Systems mit einer neueren Python-Version übrschreiben, weil dann möglicherweise einige deiner installierten Programm nicht mehr funktionieren, weil sie die ältere Version erwarten. Und es ist nicht nur die Python-Version, sondern auch die vorinstallierten Python-Module. Ich habe ein Linux-System, bei dem die Grafik-Bibliothek Mesa installiert ist. Diese wiederum verwendet das Python-Modul Mako. Wenn ich jetzt selbst ein Python-Programm schreibe, und dafür eine andere Version von Mako (neuer oder älter) verwenden will, dann kann es sein, dass Mesa mit dieser Version nicht zurechtkommt und nicht mehr korrekt funktioniert. Deswegen richte ich eine eigen Python-Umgebung ein, in der ich die von mir gewünschte Python-Version und die gewünschten Versionen der Python-Module unabhängig von deren System-Versionen verwalten kann. In deinem Fall zB. kannst du das Python-Modul mysql dort installieren, ohne dass dein Betriebssystem davon betroffen wäre. Um dein Programm dann auszuführen, musst du natürlich das Python in der Umgebung aufrufen, nicht das systemweit installierte Python.
Zuletzt geändert von pillmuncher am Mittwoch 19. März 2025, 15:23, insgesamt 1-mal geändert.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

Na, ob es wirklich der liebe Gott war? ;) Ein Kollege vom lieben Gott hat übrigens den Deepl Translater erfunden. Ich habe die beiden aber nicht verglichen und kann daher nicht sagen welcher besser ist. Aber Deepl ist im Zweifel besser als der Übersetzer hier im Firefox, aber der Übersetzer vom Firefox ist (hoffentlich wirklich) nur lokal auf meinem Rechner und würde theoretisch auch ohne Internet funktionieren.
Also den lokalen Übersetzer im Firefox und Deepl nutze ich hier immer wieder mal, Google Translate habe ich noch nie genutzt.
Antworten