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.
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ich weiß nicht wie ihr damit angefangen habt und wie lange ihr es schon macht das es bei euch flüssig von der Hand geht .
Python: seit irgendwann 2002 oder 2003. Linux: späte 90er, so richtig mit Ubuntu 5.04, also Frühjahr 2005. Wobei Linux sich weiterentwickelt und Python auch. Klar sind einige Sachen von damals noch heute gültig, aber vieles ist auch anders. "Learning by doing" ist aber immer ein guter Ansatz.

Heute nutze ich mehr Windows 11 als Ubuntu Linux bzw. Ubuntu dann in der WSL. Was ich auch aus der Zeit mitgenommen habe: als Hobbyprogrammierer für zu Hause reicht in 95% der Fälle SQLite als SQL-Datenbank. Die Anwendungsfälle, wo man zwingend eine netzwerkfähigen Datenbankserver oder parallele Schreibzugriffe braucht, sind rar.

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

Erste Berührpunkte hatte ich mit Linux und Python vor ca. 5 Jahren und dementsprechend hatte ich ähnliche Probleme und mich anfangs mal mehr und mal weniger zeitintensiv damit beschäftigt. Privat nutze ich seit 2 oder 3(?) Jahren nur noch Fedora. Also abgesehen vom Handy und Tablet.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Ich bleibe am Ball und will es auch nicht hinschmeißen .
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

Python und Linux: irgendwann zweite Hälfte 90er
mit Linux dann vielleicht 20 Jahre Pause gemacht, in der Zeit eigentlich nur noch Windows (nach Win XP ging es mit der Dateisuche bei Windows bergab, nach Win 7 insgesamt mit Windows, aktuell muss ich leider Win10 nutzen), privat seit dem sich mein letzter Windowsrechner hardware-mäßig zerlegte (Anfang 2022), wieder Linux
bei Python hatte ich die ersten 10-12 Jahre von Python3 ignoriert und bin in der Zeit einfach weiterhin bei Python 2 geblieben...
noisefloor hat geschrieben: Sonntag 23. März 2025, 20:45 Wobei Linux sich weiterentwickelt und Python auch. Klar sind einige Sachen von damals noch heute gültig, aber vieles ist auch anders.
JA! bei Python bin ich jetzt immer wieder erstaunt was es so alles neues seit Python 3 gibt und denke mir gelegentlich: "was soll ich mit diesem neuen Kram hier? Hatten wir bei Python 2 nicht und trotzdem liefen unsere Programme damals"
noisefloor hat geschrieben: Sonntag 23. März 2025, 20:45 Was ich auch aus der Zeit mitgenommen habe: als Hobbyprogrammierer für zu Hause reicht in 95% der Fälle SQLite als SQL-Datenbank. Die Anwendungsfälle, wo man zwingend eine netzwerkfähigen Datenbankserver oder parallele Schreibzugriffe braucht, sind rar.
Noch ein "Ja." von mir... vielleicht sogar mehr als 95%.
Benutzeravatar
snafu
User
Beiträge: 6830
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

grubenfox hat geschrieben: Montag 24. März 2025, 00:22 "was soll ich mit diesem neuen Kram hier? Hatten wir bei Python 2 nicht und trotzdem liefen unsere Programme damals"
Der "neue Kram" wird aber vielfach genutzt, auch wenn du selbst damit vielleicht nichts anfangen kannst. Sollen wir Dateien immer noch mit try-finally öffnen, nur weil das früher auch geklappt hat? ;)
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Naja, das führt aber auch dazu das man Bibliotheken schwerer versteht, die Sachen benutzen, die man selber nicht benutzt. Die Landschaft zersplittert, weil verschiedene Teilmengen von Programmierern verschiedene Teilmengen der Sprache verwenden. ``async``, „pattern matching“, Typannotationen, der Walross-Operator. Obwohl letzterer ja eigentlich noch am harmlosesten ist, hat der in der Community echt übel gespalten und ja letztlich auch zum Rücktritt von Guido als BDFL geführt, weil ihm das im nachhinein zu viel Gegenwind war als er den ohne Konsens durchgedrückt hatte.

Früher (wo natürlich alles besser war, selbst die Zukunft 😇) war das Kriterium für ein neues Sprachmittel in Python mal, dass es einen nachgewiesenen, greifbaren Vorteil hat. Heute ist das eher so, hey andere Sprachen haben das, wir brauchen das auch unbedingt in Python, lass mal möglichst viel da reinbasteln.

Bei *Dateien* und ``try``/``finally`` würde ich sogar sagen — warum denn nicht? Das ist jetzt nicht wirklich ein Riesengewinn:

Code: Alles auswählen

with open(…) as file:
    # …
    do_something_with(file)
    # …

# vs.

file = open(…)
try:
    # …
    do_something_with(file)
    # …
finally:
    file.close()
Wirklich wichtig ist das ``with`` IMHO erst wenn erstellen und aufräumen für mich als Programmierer komplexer werden als jeweils ein Aufruf einer Funktion/Methode und man sich das wiederholen von komplexeren Code sparen kann, beispielsweise in Kombination mit `contextlib.contextmanager`:

Code: Alles auswählen

@contextmanager
def spam(…):
    # …
    # Komplexeres aufsetzen von Eiern.
    # …
    eggs = Eggs(…)
    # …
    try:
        yield eggs
    finally:
        # …
        # Komplexeres aufräumen.
        # …
        if eggs.is_frobnicated():
            eggs.unfrobnicate(…)
        # …
        eggs.vaporize()

with spam(23) as eggs:
    do_something_with(eggs)

with spam(42) as easter_eggs:
    do_something_with(easter_eggs)
Man könnte natürlich aufsetzen und aufräumen jeweils in eine eigene Funktion stecken, aber dann kann man im Aufräumteil nicht auf lokale Variablen vom Aufsetzteil zugreifen, oder müsste eine Klasse mit einer `__init__()` zum aufsetzen und nur einer einzigen Methode zum aufräumen schreiben. Das riecht ja immer ein bisschen komisch nach Klasse die eigentlich eine Funktion sein sollte/wollte.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Benutzeravatar
DeaD_EyE
User
Beiträge: 1205
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

__blackjack__ hat geschrieben: Montag 24. März 2025, 08:40 Bei *Dateien* und ``try``/``finally`` würde ich sogar sagen — warum denn nicht? Das ist jetzt nicht wirklich ein Riesengewinn
Für mich schon. Ein Block Einrückung (with) vs. zwei Blöcke (try/finally).
Der Unterschied ist, dass man bei finally Aktionen durchführen kann, bevor man die Datei schließt, falls das eine Rolle spielt.
Bei der Generator-Funktion mit Kontextmanager hat man diese Möglichkeit auch.

Ich freue mich über jedes neue Feature bei Python, auch wenn es für Anfänger nicht unbedingt einfacher ist zu lernen.
Das ist ja mittlerweile ziemlich viel geworden.

Die Kontextmanager existieren aber schon eine halbe Ewigkeit. Selbst Python 2.6 unterstützt es.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

So viel Energie und Zeit in diese unsinnigen Typannotationen gesteckt worden ist, da hätte die Community sicher sinnvollere Sachen umsetzen können. Vor allem in Tools, die solche Prüfungen automatisch machen, ohne dass ihnen ein Mensch dabei helfen muß.
In C++ übernimmt der Compiler immer mehr Typisierungsarbeit und in Python werden dafür Menschen eingesetzt.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

TorstenVoelker hat geschrieben: Sonntag 23. März 2025, 20:44
Dennis89 hat geschrieben: Sonntag 23. März 2025, 20:11
TorstenVoelker hat geschrieben: Samstag 22. März 2025, 11:44 Achso , so sieht es in meinen Ordner aus im Notizplaner.

drwxrwxr-x 5 torsten torsten 4096 Mär 22 11:38 .
drwxrwxr-x 13 torsten torsten 4096 Mär 17 10:51 ..
-rw-rw-r-- 1 torsten torsten 242 Mär 17 10:52 connect.py
drwxrwxr-x 3 torsten torsten 4096 Mär 22 11:34 .idea
-rwxrw-r-- 1 torsten torsten 2644 Mär 22 11:38 main.py
drwxrwxr-x 2 torsten torsten 4096 Mär 17 11:00 __pycache__
drwxrwxr-x 4 torsten torsten 4096 Mär 17 10:51 .venv
Mal eins nach dem anderen. Erst mal das Programm im Terminal mit absoluten Pfadangaben starten.
Annahme, ggfs. anpassen. Im Homeverzeichnis gibt es einen Ordner "PycharmProjects", darin befindet sich ein Ordner "pythonproject" und darin befindet sich ein Ordner "Notizplaner". Groß- und Kleinschreibung beachten und evtl. auch anpassen.
Im Terminal gibst du dann ein:

Code: Alles auswählen

~/PycharmProjectss/pythonproject/Notizplaner/.venv/bin/python ~/PycharmProjectss/pythonproject/Notizplaner/main.py
Beachte es gibt nur *ein* Leerzeichen und zwar nach "python".
Bis zum ersten Leerzeichen ist es die Pfadangabe zum Pythoninterpreter, der ausgeführt werden soll und danach kommt die Pfadangabe zur Python-Datei die damit ausgeführt werden soll.

Grüße
Dennis

Edit: "~" ist eine Kurzform für dein Homeverzeichnis. Bei mir könnte ich an der Stelle auch "/home/dennis/" schreiben und bei dir entsprechend an deine Namensgebung angepasst.

Edit2: Wenn das alles nicht klappt, dann könntest du uns deine Ordnerstruktur verraten:

Code: Alles auswählen

sudo apt install tree
und dann

Code: Alles auswählen

tree -L 4 -a ~/PycharmProjects/
die vollständige Ausgabe dann hier im Codeblock posten.
Werde es Morgen mal machen .

Habe den Code mal ausgeführt .

Code: Alles auswählen

~/PycharmProjectss/pythonproject/Notizplaner/.venv/bin/python ~/PycharmProjectss/pythonproject/Notizplaner/main.py
und funktioniert .
Nur mal eine Frage , ist das nicht immer dann bisschen umständlich so eine Datei immer so auszuführen ?

Meine damit wenn man es auf einen anderen Rechner mal Ausführen möchte .

LG
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Deshalb schreibt man ja den absoluten Pfad zum python in die shebang-Zeile.
Und wenn man das auf einem anderen Rechner ausführen will, muß man ja dort erst das venv einrichten und kann dann dort auch den Pfad eintragen.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Sirius3 hat geschrieben: Montag 24. März 2025, 11:41 Deshalb schreibt man ja den absoluten Pfad zum python in die shebang-Zeile.
Und wenn man das auf einem anderen Rechner ausführen will, muß man ja dort erst das venv einrichten und kann dann dort auch den Pfad eintragen.
Die shebang-Zeile ist das was am Anfang in einem Python Script kommt ?
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TorstenVoelker: Es gibt Suchmaschinen und Wikipedia was gerade zu Computer- und Informatik-Themen für fast alles einen Artikel hat: https://de.wikipedia.org/wiki/Shebang

Wenn venvs für den Anfang noch zu umständlich sind, kann man natürlich auch ohne, solange man nur Sachen verwendet, die die Linux-Distribution als Paket anbietet. Falls also nur mysql.connector als Abhängigkeit da ist, sollte man das auch als Paket von der Distribution installieren können. Oder zumindest eine Python-Anbindung für MySQL/MariaDB.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Meine damit wenn man es auf einen anderen Rechner mal Ausführen möchte .
Um eine Python-Datei auf einem anderen Rechner ausführen zu können darfst du entweder nur Python-Module aus der Standardinstallation verwenden und hast idealerweise auf dem anderen Rechner die gleiche Python-Version (oder eine neuere). Sobald du externe Module (wie bei dir das für MySQL) nutzt, musst du die sowieso auf dem anderen Rechner installieren.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1733
Registriert: Samstag 16. April 2011, 12:47

TorstenVoelker hat geschrieben: Montag 24. März 2025, 12:24 Die shebang-Zeile ist das was am Anfang in einem Python Script kommt ?
Ja, aber das hat nicht direkt was mit Python zu tun. Das ist ein allgemeiner Mechanismus, um Skripte unter Linux (/MacOS/anderen Unix-Systemen) ausführen zu können und würde genau so mit Bash, Perl, Ruby, PHP, etc. funktionieren. Das, was nach dem #! kommt, gibt den Pfad zu einem Programm an, das zum Ausführen des Codes in der Datei verwendet werden soll. Wenn du eine Datei, die das in der ersten Zeile stehen hat, mit chmod +x <dateiname> ausführbar machst und anschließend mit ./<dateiname>, aufrufst, erkennt das Betriebssystem die Zeichenfolge #! in der ersten Zeile, sieht den Rest der Zeile als Pfad zu einem Programm an und füttert den Inhalt der Datei an dieses Programm. Da '#' in Python (und den anderen genannten Sprachen) gleichzeitig einen Kommentar einleitet, wird diese erste Zeile von Python einfach ignoriert.
TorstenVoelker
User
Beiträge: 124
Registriert: Mittwoch 5. Februar 2025, 12:55

Wäre es möglich ich glaub sogar das es schon einer geschrieben hat das man mit mkdir ein Ordner erstellt dann die venv aktiviert für den Ordner und dann in Python den Ordner nimmt und ein Script schreibt zb Kontakt Formular mit einer MySQL Datenbank erstellt .

Wäre das möglich und einerseits vielleicht einfacher das gleich so zu machen ?
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

dann die venv aktiviert für den Ordner
Du kannst ein venv nicht für einen Ordner aktivieren. Du kannst ein venv aktivieren und dann ist das für den Terminal, in dem es aktiviert ist, aktiv, bist du es deaktivierst oder den Terminal schließt.

Wo das Skript liegt und wo das venv liegt ist grundsätzlich egal. Auch, wenn es gängige Praxis ist, dass Skript(e) im venv Ordner liegen.

Um ein Python-Skript auszuführen brauchst du zwei Sachen: den Python-Interpreter und das Skript. Wenn du beim Aufruf den vollen Pfad zum Python-Interpreter angibst - das kann auch der in einem venv sein und den vollen Pfad zum Skript - können die beiden prinzipiell relativ beliebig zueinander liegen. Klingt vielleicht verwirrend, mag auf den ersten Blick auch so aussehen - ist es aber nicht bzw. es ist eigentlich alles ziemlich logisch. Gilt auch alles nicht nur für Python, sondern für jede Sprache, wo beim Ausführen einer Datei noch ein Interpreter, eine Runtime oder so mit angegeben werden muss. Und gilt auch nicht nur für Linux, sondern genau so auch für Windows und MacOS.

Und nochmal der Tipp: vergiß' erstmal die Shebang, weil das ja sehr offensichtlich für Verwirrung bei dir sorgt. Ruf' den Python-Interpreter explizit zusammen mit dem Skript auf. Das "wie" wurde schon hier im Thread gezeigt.

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

noisefloor hat geschrieben: Montag 24. März 2025, 19:50
dann die venv aktiviert für den Ordner
Du kannst ein venv nicht für einen Ordner aktivieren. Du kannst ein venv aktivieren und dann ist das für den Terminal, in dem es aktiviert ist, aktiv, bist du es deaktivierst oder den Terminal schließt.

Wo das Skript liegt und wo das venv liegt ist grundsätzlich egal. Auch, wenn es gängige Praxis ist, dass Skript(e) im venv Ordner liegen.

Um ein Python-Skript auszuführen brauchst du zwei Sachen: den Python-Interpreter und das Skript. Wenn du beim Aufruf den vollen Pfad zum Python-Interpreter angibst - das kann auch der in einem venv sein und den vollen Pfad zum Skript - können die beiden prinzipiell relativ beliebig zueinander liegen. Klingt vielleicht verwirrend, mag auf den ersten Blick auch so aussehen - ist es aber nicht bzw. es ist eigentlich alles ziemlich logisch. Gilt auch alles nicht nur für Python, sondern für jede Sprache, wo beim Ausführen einer Datei noch ein Interpreter, eine Runtime oder so mit angegeben werden muss. Und gilt auch nicht nur für Linux, sondern genau so auch für Windows und MacOS.

Und nochmal der Tipp: vergiß' erstmal die Shebang, weil das ja sehr offensichtlich für Verwirrung bei dir sorgt. Ruf' den Python-Interpreter explizit zusammen mit dem Skript auf. Das "wie" wurde schon hier im Thread gezeigt.

Gruß, noisefloor
Ok danke für den Tipp!

Also im Terminal zb

Code: Alles auswählen


~/PycharmProjectss/pythonproject/Notizplaner/.venv/bin/python ~/PycharmProjectss/pythonproject/Notizplaner/main.py

Ok dann werde ich es erstmal so machen .

Habe mir grade ein Buch bestellt in Sachen Linux für Anfänger von Markus neumann .

Erstmal die Grundlagen lernen das man überhaupt erstmal weiß was für was ist und macht .

Von
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Erstmal die Grundlagen lernen das man überhaupt erstmal weiß was für was ist und macht .
Wobei deine hier geschilderten Problem schon speziell auf Python und venv bezogen sind, kombiniert mit einer IDE.

Und, wichtig: Linux ist nicht gleich Linux, bzw. Linux-Distribution ist nicht gleich Linux-Distribution. Da gibt es _drastische_ Unterschiede zwischen den Distributionen, z.B. was die Paketverwaltung angeht. Andere Sachen sind dagegen ziemlich identisch, z.B. die ganzen Shell Tools. Wobei: das steht ja eine Zeitenwenden an. Z.B. will / wird Ubuntu mit den nächsten Release auf neuere, in Rust geschriebene Tools umstellen. Vermutlich werden das andere Distros dann auch machen.

Welche Linux-Distribution benutzt du?

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

noisefloor hat geschrieben: Montag 24. März 2025, 20:19
Erstmal die Grundlagen lernen das man überhaupt erstmal weiß was für was ist und macht .
Wobei deine hier geschilderten Problem schon speziell auf Python und venv bezogen sind, kombiniert mit einer IDE.

Und, wichtig: Linux ist nicht gleich Linux, bzw. Linux-Distribution ist nicht gleich Linux-Distribution. Da gibt es _drastische_ Unterschiede zwischen den Distributionen, z.B. was die Paketverwaltung angeht. Andere Sachen sind dagegen ziemlich identisch, z.B. die ganzen Shell Tools. Wobei: das steht ja eine Zeitenwenden an. Z.B. will / wird Ubuntu mit den nächsten Release auf neuere, in Rust geschriebene Tools umstellen. Vermutlich werden das andere Distros dann auch machen.

Welche Linux-Distribution benutzt du?

Gruß, noisefloor
Wenn Du meinst welche Linux Version
Ich habe Linux Mint .
nezzcarth
User
Beiträge: 1733
Registriert: Samstag 16. April 2011, 12:47

TorstenVoelker hat geschrieben: Montag 24. März 2025, 20:49 Wenn Du meinst welche Linux Version
Ich habe Linux Mint .
Distribution war hier schon der korrekte Begriff. "Linux-Version" hat meistens eher eine andere Bedeutung (er bezieht sich auf eine bestimmte Komponente eines Linux-Systems (den Kernel) aber vielleicht bringt es nichts, weitere verwirrende Begriffe einzuführen; wichtig ist vielleicht erst mal nur, dass sowas wie "Mint", "Ubuntu", "Debian", "Fedora", "Arch" etc. "Distributionen" sind, keine "Versionen").
Antworten