Python Error deuten und Herangehensweise

lockdoc

Well-Known Member
Hallo,

ich hantiere in letzter Zeit viel mit Python-Fehlern herum und wuerde doch mal gerne wissen wie die genaue Herangehensweise ist und was mir die Fehler denn genau sagen. Ob es wie bei C Fehlern so ist, dass man sich zuerst den ersten Fehler ansieht, der meisst alle anderen ausmerzt oder ob man unten anfaengt oder oder oder.

Ich habe derzeit auch ein aktuelles Beispiel fuer das RabitCVS Plugin fuer Nautilus.

RabbitVCS.py habe ich nach /home/lockdoc/.nautilus/python-extensions/RabbitVCS.py kopiert und dann rufe ich nautilus auf

Code:
> nautilus

(nautilus:88497): Nautilus-Python-WARNING **: g_module_open libpython failed: Cannot open "/usr/local/lib/libpythonpython2.7.so.1.0"
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/gtk-2.0/gobject/__init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/local/lib/python2.7/site-packages/gtk-2.0/glib/__init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/local/lib/python2.7/site-packages/gtk-2.0/glib/_glib.so: Undefined symbol "_Py_ZeroStruct"

(nautilus:88497): Nautilus-Python-WARNING **: could not import gobject

(nautilus:88497): Nautilus-Python-WARNING **: pygobject initialization failed

(nautilus:88497): Nautilus-Python-WARNING **: nautilus_python_init_python failed
Traceback (most recent call last):
  File "/home/lockdoc/.nautilus/python-extensions/RabbitVCS.py", line 57, in <module>
    import datetime
ImportError: /usr/local/lib/python2.7/lib-dynload/datetime.so: Undefined symbol "_Py_ZeroStruct"

Das erste was ich gemacht habe, war einfach mal kucken, ob _Py_ZeroStruct in Python existiert:
Code:
objdump -T /usr/local/bin/python | grep _Py_ZeroStruct
0816ff84 g    DO .data	0000000c  Base

Scheint da zu sein. Soweit zu meinem ersten Schritt.

Ich bin mir nicht ganz sicher wie ich die glib und gobject Sachen deuten soll und ob das was damit zu tun hat.

Also wie lese ich diese Fehler korrekt und kann meine Schluesse daraus ziehen?
 
ImportError wird in der Regel ausgelöst wenn ein Modul oder Attribut, welches im Code mittels "from" und/oder "import" eingefügt werden soll , nicht gefunden wurde.
"undefined" bedeutet nicht, dass es nicht vorhanden ist.
 
Zuletzt bearbeitet:
War wohl schon bissel zu spaet fuer mich gestern abend. Heute nochmal raufgekuckt.

Code:
> nautilus

(nautilus:88497): Nautilus-Python-WARNING **: g_module_open libpython failed:
Cannot open "/usr/local/lib/[B][COLOR="Red"]libpythonpython2.7.so.1.0[/COLOR][/B]"
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/gtk-2.0/gobject/__init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/local/lib/python2.7/site-packages/gtk-2.0/glib/__init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/local/lib/python2.7/site-packages/gtk-2.0/glib/_glib.so: Undefined symbol "_Py_ZeroStruct"

Was ist denn bitte die libpythonpython2.7.so.1.0
Ich habe grade mal eine libpython2.7.so.1 ich denke mal er meint diese und ich hab ein Symlink erstellt, damit geht es. Aber dieses doppelte python in der lib die er sucht sieht wohl nach einem Programmierfehler aus.

Ich habe mir dann die naechste Zeile angesehen wo es heisst:
Code:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/gtk-2.0/gobject/__init__.py", line 26, in <module>


Diese sieht dann so aus:
Code:
[COLOR="DarkOrange"] 26[/COLOR] [COLOR="Navy"]from[/COLOR] glib [COLOR="navy"]import[/COLOR] spawn_async, idle_add, timeout_add, timeout_add_seconds, \
[COLOR="DarkOrange"] 27[/COLOR]      io_add_watch, source_remove, child_watch_add, markup_escape_text, \
[COLOR="DarkOrange"] 28 [/COLOR]     get_current_time, filename_display_name, filename_display_basename, \
[COLOR="DarkOrange"] 29[/COLOR]      filename_from_utf8, get_application_name, set_application_name, \
[COLOR="DarkOrange"] 30[/COLOR]      get_prgname, set_prgname, main_depth, Pid, GError, glib_version, \
[COLOR="DarkOrange"] 31[/COLOR]      MainLoop, MainContext, main_context_default, IOChannel, Source, Idle, \
[COLOR="DarkOrange"] 32[/COLOR]      Timeout, PollFD, OptionGroup, OptionContext, option, uri_list_extract_uris

Und hier komm ich dann nicht ganz weiter. Also das Problem habe ich nun schon durch den Symlink geloest, ich wuerde aber gerne wissen, wo ich das im Code finde, denn beim naechsten mal laesst sich evtl. irgendwas nicht via Symlink loesen und es ist auch nicht so eine saubere Sache
 
Das ist ja schon ein uebelst alter Fehler.
Aber diesmal muss man ja sogar noch utopischer symlinken.
Code:
libpython2.7.so.1 -> lib[COLOR="DarkRed"][B]python[/B][/COLOR][COLOR="DarkGreen"][B]python[/B][/COLOR]2.7.so.1[COLOR="Indigo"][B].0[/B][/COLOR]
 
Habe mal ins Referenz Handbuch geschaut:
Die from-Anweisung importiert Namen aus einem Modul, damit sie anschließend ohne Qualifizierung genutzt werden können. die Variante from modul import * importiert alle Namen, die auf der obersten Ebene des Moduls definiert sind, abgesehen von Namen, die mit einem Unterstrich beginnen, und Namen, die nicht im Modulattribut __all__ (einer Liste von Strings) vorkommen (sofern definiert).
Wenn ich das richtig interpretiere liegt da wohl in Nautilus ein kleiner Programmierfehler vor.
 
Beim Import des "halben" Namensraum von Glib sträuben sich mir alle Nackenhaare. Das kann man sicherlich pythonischer gestalten.
 
Zurück
Oben