Seite 1 von 1

Scriptaufruf klappt nicht

Verfasst: Mittwoch 12. August 2015, 14:10
von sedi
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

Re: Scriptaufruf klappt nicht

Verfasst: Mittwoch 12. August 2015, 14:23
von Sirius3
@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?

Re: Scriptaufruf klappt nicht

Verfasst: Mittwoch 12. August 2015, 14:59
von sedi
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

Re: Scriptaufruf klappt nicht [gelöst]

Verfasst: Mittwoch 12. August 2015, 15:09
von sedi
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!

Re: Scriptaufruf klappt nicht

Verfasst: Mittwoch 12. August 2015, 16:44
von 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.

Re: Scriptaufruf klappt nicht

Verfasst: Mittwoch 12. August 2015, 17:02
von sedi
Danke @BlackJack - hashbang eingetragen - funktioniert