ubuntuusers.de

Python: Programm wird nicht ausgeführt

Status: Ungelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Axel-Erfurt schrieb:

Dann aber python.linting.enabled ausschalten sonst gibt es eine Menge sinnfreie sogenannte "Problems" aus.

Lieber einen unaufgeregten Linter (wie flake8) wählen und den so konfigurieren, dass er nur über Dinge meckert, die man selber ernst nehmen will.

user_unknown schrieb:

Ist das nicht ein bischen fett, träge und für den Anfänger überfordernd? Das ist doch sicher überfrachtet mit Einstelloptionen.

  • Fett im Sinne von "das ist eine Electron-Anwendung" und vim ist eh viel besser? Ja.

  • Träge? Zumindest fühlt es sich flotter an als Emacs, da es Dinge besser asynchron abarbeiten kann.

  • Überfordernd? Die Konfiguration wächst mit ihren Aufgaben und für das allermeiste gibt es mittlerweile nette Einstellungsdialoge, so dass man nur noch selten direkt an die json-Konfiguration ran muss.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

seahawk1986 schrieb:

user_unknown schrieb:

Ist das nicht ein bischen fett, träge und für den Anfänger überfordernd? Das ist doch sicher überfrachtet mit Einstelloptionen.

  • Fett im Sinne von "das ist eine Electron-Anwendung" und vim ist eh viel besser? Ja.

Fett im Sinne von "Viele Megabytes, spürbare Startzeit.

  • Träge? Zumindest fühlt es sich flotter an als Emacs, da es Dinge besser asynchron abarbeiten kann.

  • Überfordernd? Die Konfiguration wächst mit ihren Aufgaben und für das allermeiste gibt es mittlerweile nette Einstellungsdialoge, so dass man nur noch selten direkt an die json-Konfiguration ran muss.

Es gibt Tools, die ihre Stärken erst ausspielen, wenn man mehrere Dateien die zu einem Projekt gehören hin- und herspringend bearbeitet.

Ich hatte ja oben Geany vorgeschlagen als Mittelding. Geringe Einstiegshürde, auch bei 3-4 Dateien wohl noch geeignet.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: Zähle...

Danke für die Hinweise zu den Eiditoren / Programmierumgebungen.

Trotzdem möchte ich mich erst einmal auf den "vernünftigen" Start einer .py z.B.( per Doppelklick auf die ausführbare Datei) konzentrieren. Ich bin überzeugt, dass da bei meinem System "etwas" nicht stimmt, da sich die .py so anders verhält, als eine .sh. Es wäre fein, wenn mir jemand sagt, was ich testen kann.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: Zähle...

Aus meinem Ursprungs-Posting: michahe schrieb:

Meine erste Datei PY.py, ausführbar markiert, hat folgenden Code:

#!/usr/bin/env python3
print("Test")

Das markierte ist definitiv falsch, /usr/bin/env gibt es bei mir nicht! Dieses Beispiel habe ich angesehen.

In /usr/bin/ gibt es mehrere files py*. Wie kann ich herausfinden, was meiner Shebang-Zeile stehen muss?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

/usr/bin/env steckt im Paket coreutils: https://packages.ubuntu.com/bionic/amd64/coreutils/filelist - wenn das bei einer Ubuntu-Installation nicht vorhanden ist, würde ich mir stark überlegen, was da administrativ schief gegangen ist...

Die Konstruktion mit env dient dazu dass in Virtual Environments der jeweilige Python-Interpreter gefunden werden kann. Wenn man den Interpreter auf den Pfad für das System-Python festnageln will, könnte man z.B. so einen Shebang nutzen: #!/usr/bin/python3

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

seahawk1986 schrieb:

/usr/bin/env steckt im Paket coreutils: https://packages.ubuntu.com/bionic/amd64/coreutils/filelist - wenn das bei einer Ubuntu-Installation nicht vorhanden ist, würde ich mir stark überlegen, was da administrativ schief gegangen ist...

Allerdings. Jedenfalls ist das dann keine heile Standard-Kubuntu-Installation.

Die Konstruktion mit env dient dazu dass in Virtual Environments der jeweilige Python-Interpreter gefunden werden kann. Wenn man den Interpreter auf den Pfad für das System-Python festnageln will, könnte man z.B. so einen Shebang nutzen: #!/usr/bin/python3

Das würde ich generell bevorzugen, weil das sicherer ist. Wenn man über env geht, wird ja im $PATH gesucht.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

rklm schrieb:

Das würde ich generell bevorzugen, weil das sicherer ist.

Wenn man das macht, gibt es auch noch Möglichkeiten dem Interpreter Dinge über Umgebungsvariablen unterzujubeln: https://docs.python.org/3/using/cmdline.html#environment-variables - die Startargumente -e und -I können da ggf. hilfreich sein.

Wenn man über env geht, wird ja im $PATH gesucht.

Die Suche im $PATH ist im Fall eines Virtual Environments (das man ja nur zum Entwickeln bzw. Einrichten der Umgebung aktiv nutzt) mitunter genau das, was man will - damit kann man z.B. ein Skript abhängig von seiner Umgebung mit unterschiedlichen Versionen von Python und Modulen testen. Die in einem venv über pip installierten ausführbaren Python-Skripte bekommen dann in ihrem Shebang einen absoluten Pfad zum jeweiligen Python-Interpreter stehen und man muss das Virtual Environment nicht mehr extra in einer Shell-Sitzung aktivieren, um sie auszuführen.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Ich bitte um Verzeihung, zu wenig Kaffee heute früh ...

/usr/bin/env steckt im Paket coreutils: https://packages.ubuntu.com/bionic/amd64/coreutils/filelist - wenn das bei einer Ubuntu-Installation nicht vorhanden ist, würde ich mir stark überlegen, was da administrativ schief gegangen ist...

Allerdings. Jedenfalls ist das dann keine heile Standard-Kubuntu-Installation.

env ist nicht das von mir gesuchte Verzeichnis sondern eine Datei, die existiert!

Also wieder die ursprüngliche Shebang und einen Text und sys.version ausgeben, Code:

#!/usr/bin/env python3
print('Test')
import sys
print(sys.version)

Ausgabe:

$ python PY.py
Test
2.7.17 (default, Sep 30 2020, 13:38:04) 
[GCC 7.5.0]
$

Wie muss die Shebang-Zeile wirklich lauten? Es gibt hier (mindestens) diese Versionen:

$ /usr/bin/env python -V
Python 2.7.17
$ /usr/bin/env python3 -V
Python 3.6.9
$ 

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

michahe schrieb:

env ist nicht das von mir gesuchte Verzeichnis sondern eine Datei, die existiert!

Ja, das ist ein Programm - wie kommst du darauf, dass das ein Verzeichnis sein soll?

Also wieder die ursprüngliche Shebang und einen Text und sys.version ausgeben, Code:

#!/usr/bin/env python3
print('Test')
import sys
print(sys.version)

Ausgabe:

$ python PY.py
Test
2.7.17 (default, Sep 30 2020, 13:38:04) 
[GCC 7.5.0]
$

Wie muss die Shebang-Zeile wirklich lauten? Es gibt hier (mindestens) diese Versionen:

$ /usr/bin/env python -V
Python 2.7.17
$ /usr/bin/env python3 -V
Python 3.6.9
$ 

Python2 ist mittlerweile obsolet und sollte für neue Projekte nicht mehr verwendet werden. Bei Debian und Ubuntu zeigt /usr/bin/python traditionell auf /usr/bin/python2, ab Ubuntu 20.04 kann man über die Pakete python-is-python2 und python-is-python3 festlegen, was man haben will.

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

python3 PY.py

oder ausführbar machen und

./Py.py
Test
3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0]

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

seahawk1986 schrieb:

rklm schrieb:

Das würde ich generell bevorzugen, weil das sicherer ist.

Wenn man das macht, gibt es auch noch Möglichkeiten dem Interpreter Dinge über Umgebungsvariablen unterzujubeln:

Das kann man mit env ebenfalls. Das ist doch kein Unterschied.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke, die Start-Varianten von Axel-Erfurt funktionieren und nutzen Python3. Python2 will ich nicht nutzen!

Kann ich in der Shebang die Python-Variante "erzwingen"?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

rklm schrieb:

Das kann man mit env ebenfalls. Das ist doch kein Unterschied.

Ich wollte damit ausdrücken, dass man sich kleine übertriebenen Hoffnungen auf einen Sicherheitsgewinn machen sollte, wenn man den Python-Interpreter nicht im $PATH suchen lässt.

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

michahe schrieb:

Kann ich in der Shebang die Python-Variante "erzwingen"?

Hast Du ja gemacht mit

#!/usr/bin/env python3

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke Axel-Erfurt,

Kann ich in der Shebang die Python-Variante "erzwingen"?

Hast Du ja gemacht mit

#!/usr/bin/env python3

Ja, habe ich gedacht; das funktioniert aber (bei mir) nicht, siehe mein Posting hier.

Bisher führen nur die von Dir beschriebenen Start-Methoden dazu, das Python3 ausgeführt wird. Was in der Shebang-Zeile steht ist nach meinen Tests vollkommen wurscht.