Scriptaufruf klappt nicht

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
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hallo zusammen,

ich habe folgendes Problem:

Ich sammle alle meine Pythonscripts in einem Ordner ~/bin/scripts/python. Dort liegen überwiegend nur Links zu Scriptdateien. Bisher war das nie ein Problem - zumindest fiel mir nichts auf. Heute wurde beim Aufruf des Scripts lis-schluessel.py folgender Fehler geworfen:

Code: Alles auswählen

> lis-schluessel.py 33
Traceback (most recent call last):
File "~/bin/scripts/python/lis-schluessel.py", line 8, in <module>
  import lis.lib.schluessel
ImportError: No module named lis.lib.schluessel
. Ich weiß aber, dass das Modul lis.lib.schluessel existiert!

Rufe ich das gleiche Skript mit python auf, dann funktioniert es problemlos:

Code: Alles auswählen

python lis-schluessel.py 33
[33.0, 28.5, 24.0, 19.0, 13.5, 6.5]
Hoffe von Euch hat jemand einen Vorschlag.

Danke
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@sedi: ist die Datei lis-schluessel.py dieselbe? Ist das Verzeichnis, aus dem Du es startest, das selbe? Wo liegt das Verzeichnis lis relativ zu lis-schluessel.py?
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Danke @Sirius3:

1. Frage: Ich glaube ich versteh' nicht ganz, was Du mit
ist die Datei lis-schluessel.py dieselbe?
meinst - aber ich liste Dir mal das auf was ich weiß:

Das Modul schluessel.py gehört zu einem Paket, dass sich im Python-Package-Verzeichnis /usr/local/lib/python3.3/site-packages/
befindet.

Code: Alles auswählen

> ls -1 /usr/local/lib/python3.3/site-packages
lis (<--hier)
lis-0.0.1-py3.3.egg-info
__pycache__
und darin befindet sich das Modul 'schluessel.py':

Code: Alles auswählen

> ls -1 /usr/local/lib/python3.3/site-packages/lis/lib
...
__init__.py
schluessel.py (<-- hier)
...
Das ausführbare Skript ist eigentlich nur der Link ~/bin/scripts/python/lis-schluessel.py, welcher auf die Datei ~/development/python/scripts/lis-schluessel.py zeigt. Letzteres versucht das Modul lis.lib.schluessel zu importieren.

2. Frage:
Ist das Verzeichnis, aus dem Du es startest, das selbe?
Nein, die Skripts sollen ja von überall aus aufrufbar sein - so wie ein Bashscript auch.

3. Frage:
Siehe unter 1. - glaube ich
- ich hoffe Du kannst damit was anfangen.

Danke
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Problem war, dass nach der Umstellung auf Python3.3 die hashbang #!/usr/bin/env python auf Python2.7 zeigte!
Nach der Umstellung des Links /usr/bin/python -> python2.7 auf /usr/bin/python -> python3.3 lief es problemlos.

Danke @Sirius, das Nachdenken über ist die Datei lis-schluessel.py dieselbe? hat mich auf die Lösung gebracht - super!
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
BlackJack

@sedi: Diesen Link solltest Du nicht umstellen, denn das System erwartet offenbar unter dem Namen ``python`` dass das ``python2.7`` ist. Das heisst alle Programme die das erwarten fallen nun auf die Nase weil sie stattdessen Python 3.3 bekommen. ``python`` ist *immer* Python 2.x. Das ist zumindest das wovon auch die Python-Entwickler selber ausgehen. Wenn Du etwas anderes willst, dann schreib das in die Hashbang-Zeile. Das ist der vorgesehene Weg.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Danke @BlackJack - hashbang eingetragen - funktioniert
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Antworten