Python 2.73 + rope + dict-comprehensions

Hallo zusammen,
Ich probiere mich gerade an Emacs + rope (aktuelle version) und arbeite an einem Projekt in dem dict-comprehensions im Einsatz sind. Mein Problem: Bei jeder dict-comprehension meldet rope es handle sich um einen Syntax-Fehler.
Werden die von rope noch nicht unterstützt, kann man das konfigurieren oder mache ich etwas falsch?
Viele Grüße, Dirk.

Am 16.07.2011 16:17, schrieb Dirk:
Hallo zusammen,
Ich probiere mich gerade an Emacs + rope (aktuelle version) und arbeite an einem Projekt in dem dict-comprehensions im Einsatz sind. Mein Problem: Bei jeder dict-comprehension meldet rope es handle sich um einen Syntax-Fehler.
Werden die von rope noch nicht unterstützt, kann man das konfigurieren oder mache ich etwas falsch?
Viele Grüße, Dirk.
Falls es etwas zu lesen, gibt, will ich gern mal reinschauen.
Grüße
Andreas
-- https://launchpad.net/python-mode https://launchpad.net/s-x-emacs-werkstatt/

On 2011-07-19 15:20:45 +0200, Andreas Röhler said:
Am 16.07.2011 16:17, schrieb Dirk:
Hallo zusammen,
Ich probiere mich gerade an Emacs + rope (aktuelle version) und arbeite an einem Projekt in dem dict-comprehensions im Einsatz sind. Mein Problem: Bei jeder dict-comprehension meldet rope es handle sich um einen Syntax-Fehler.
Werden die von rope noch nicht unterstützt, kann man das konfigurieren oder mache ich etwas falsch?
Viele Grüße, Dirk.
Falls es etwas zu lesen, gibt, will ich gern mal reinschauen.
Grüße
Andreas
Hallo,
tut mir leid das ich eine sehr wage Fehlerbeschreibung geliefert habe, ich wusste nicht so richtig wie ich meine Frage präzisieren sollte.
ich denke das ursprüngliche Problem habe ich zufällig gelöst. Ich habe es anscheinend geschafft mein Emacs zwei verschiedene Python Versionen ansprechen zu lassen. Der aufgerufene Interpreter war immer ein Python 2.7.3, hinter den Kulissen arbeitete aber ein Python 2.6. Das habe ich erst herausgefunden als ich python mal aus einer shell in Emacs aufgerufen habe. Ich das ist inzwischen behoben, das war ein PATH Problem.
Rope meldet nun keinen Syntaxfehler mehr in der Zeile mit der dict-comprehension. Allerdings bricht es selbst in einer minimal Datei wie folgt nach 5 Minuten bearbeitungszeit mit einer Exception ab (Traceback am Schluss).
~/ropetest/minimal_example.py a = 5 b = 7 c = a + b
Ich habe bei a den Befehl "Rename" ausgelöst. Im Minibuffer steht 5 minuten lang "Calculating rename changes..." sonst tut sich nichts. CPU Auslastung nahe 0.
Soweit ich den Traceback unten richtig interpretiere durchsucht rope mein komplettes Benutzerverzeichnis nach .py Dateien, denn sonst hätte es nicht die Gentoo-prefix Installation finden können die dort liegt. Dort meint er einen Fehler zu finden. (Sieht man sich den Dateinamen an wird sofort klar warum python 2 dort einen Fehler meldet...)
Rope kann doch nicht ernsthaft in jeder python Datei auf dem System nach Referenzen auf mein besagtes a suchen?
Ich benutze Emacs 23.3 mit dem Python-Erweiterungspaket von http://gabrielelanaro.github.com/emacs-for-python/ .
Der Python betreffende Teil meiner .emacs ist ehr langweilig: ;python (load-file "~/.emacs.d/emacs-for-python/epy-init.el") (epy-setup-checker "pylint -f parseable %f") (setq python-mode-hook '(lambda () "Turn off Indent Tabs mode." (set (make-local-variable 'indent-tabs-mode) nil)))
Der Traceback von der Exception: Traceback (most recent call last): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/decorators.py", line 53, in newfunc return func(*args, **kwds) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/interface.py", line 52, in do_refactor refactoring(self, self.env).show(initial_asking=initial_asking) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 43, in show changes = runtask(self.env, calculate, name=name) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 469, in runtask return RunTask(env, command, name, interrupts)() File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 489, in __call__ result = self.task(handle) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 41, in calculate return self._calculate_changes(result, handle) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 122, in _calculate_changes return self.renamer.get_changes(task_handle=task_handle, **values) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/rename.py", line 95, in get_changes new_content = rename_in_module(finder, new_name, resource=file_) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/rename.py", line 192, in rename_in_module for occurrence in occurrences_finder.find_occurrences(resource, pymodule): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 36, in find_occurrences result = filter(occurrence) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 160, in __call__ if same_pyname(self.pyname, occurrence.get_pyname()): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 92, in get_pyname return self.tools.name_finder.get_pyname_at(self.offset) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 306, in name_finder return evaluate.ScopeNameFinder(self.pymodule) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 334, in pymodule return self.pycore.resource_to_pyobject(self.resource) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pycore.py", line 194, in resource_to_pyobject return self.module_cache.get_pymodule(resource, force_errors) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pycore.py", line 320, in get_pymodule force_errors=force_errors) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pyobjectsdef.py", line 153, in __init__ source, node = self._init_source(pycore, source, resource) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pyobjectsdef.py", line 182, in _init_source raise exceptions.ModuleSyntaxError(filename, e.lineno, e.msg) ModuleSyntaxError: Syntax error in file <Gentoo/usr/lib/python2.7/lib2to3/tests/data/py3_test_grammar.py> line <130>: invalid syntax
ModuleSyntaxError: Syntax error in file <Gentoo/usr/lib/python2.7/lib2to3/tests/data/py3_test_grammar.py> line <130>: invalid syntax

[ ... ]
Rope meldet nun keinen Syntaxfehler mehr in der Zeile mit der dict-comprehension. Allerdings bricht es selbst in einer minimal Datei wie folgt nach 5 Minuten bearbeitungszeit mit einer Exception ab (Traceback am Schluss).
~/ropetest/minimal_example.py a = 5 b = 7 c = a + b
Ich habe bei a den Befehl "Rename" ausgelöst. Im Minibuffer steht 5 minuten lang "Calculating rename changes..." sonst tut sich nichts. CPU Auslastung nahe 0.
Soweit ich den Traceback unten richtig interpretiere durchsucht rope mein komplettes Benutzerverzeichnis nach .py Dateien, denn sonst hätte es nicht die Gentoo-prefix Installation finden können die dort liegt.
Kenne mich bei Gentoo nicht aus, sehe aber keinen Anhaltspunkt für die Vermutung. Soweit ich sehe, werden die geladenen Module durchgegangen.
Grüße
Dort meint er einen Fehler zu finden. (Sieht man sich den Dateinamen an wird sofort klar warum python 2 dort einen Fehler meldet...)
Rope kann doch nicht ernsthaft in jeder python Datei auf dem System nach Referenzen auf mein besagtes a suchen?
Ich benutze Emacs 23.3 mit dem Python-Erweiterungspaket von http://gabrielelanaro.github.com/emacs-for-python/ .
Der Python betreffende Teil meiner .emacs ist ehr langweilig: ;python (load-file "~/.emacs.d/emacs-for-python/epy-init.el") (epy-setup-checker "pylint -f parseable %f") (setq python-mode-hook '(lambda () "Turn off Indent Tabs mode." (set (make-local-variable 'indent-tabs-mode) nil)))
Der Traceback von der Exception: Traceback (most recent call last): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/decorators.py", line 53, in newfunc return func(*args, **kwds) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/interface.py", line 52, in do_refactor refactoring(self, self.env).show(initial_asking=initial_asking) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 43, in show changes = runtask(self.env, calculate, name=name) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 469, in runtask return RunTask(env, command, name, interrupts)() File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 489, in __call__ result = self.task(handle) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 41, in calculate return self._calculate_changes(result, handle) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/ropemode-0.1_rc2-py2.7.egg/ropemode/refactor.py", line 122, in _calculate_changes return self.renamer.get_changes(task_handle=task_handle, **values) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/rename.py", line 95, in get_changes new_content = rename_in_module(finder, new_name, resource=file_) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/rename.py", line 192, in rename_in_module for occurrence in occurrences_finder.find_occurrences(resource, pymodule): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 36, in find_occurrences result = filter(occurrence) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 160, in __call__ if same_pyname(self.pyname, occurrence.get_pyname()): File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 92, in get_pyname return self.tools.name_finder.get_pyname_at(self.offset) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 306, in name_finder return evaluate.ScopeNameFinder(self.pymodule) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/utils.py", line 10, in _wrapper setattr(self, name, func(self, *args, **kwds)) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/refactor/occurrences.py", line 334, in pymodule return self.pycore.resource_to_pyobject(self.resource) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pycore.py", line 194, in resource_to_pyobject return self.module_cache.get_pymodule(resource, force_errors) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pycore.py", line 320, in get_pymodule force_errors=force_errors) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pyobjectsdef.py", line 153, in __init__ source, node = self._init_source(pycore, source, resource) File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/rope-0.9.3-py2.7.egg/rope/base/pyobjectsdef.py", line 182, in _init_source raise exceptions.ModuleSyntaxError(filename, e.lineno, e.msg) ModuleSyntaxError: Syntax error in file <Gentoo/usr/lib/python2.7/lib2to3/tests/data/py3_test_grammar.py> line <130>: invalid syntax
ModuleSyntaxError: Syntax error in file <Gentoo/usr/lib/python2.7/lib2to3/tests/data/py3_test_grammar.py> line <130>: invalid syntax

On 2011-07-19 21:03:20 +0200, Andreas Röhler said:
[ ... ]
Rope meldet nun keinen Syntaxfehler mehr in der Zeile mit der dict-comprehension. Allerdings bricht es selbst in einer minimal Datei wie folgt nach 5 Minuten bearbeitungszeit mit einer Exception ab (Traceback am Schluss).
~/ropetest/minimal_example.py a = 5 b = 7 c = a + b
Ich habe bei a den Befehl "Rename" ausgelöst. Im Minibuffer steht 5 minuten lang "Calculating rename changes..." sonst tut sich nichts. CPU Auslastung nahe 0.
Soweit ich den Traceback unten richtig interpretiere durchsucht rope mein komplettes Benutzerverzeichnis nach .py Dateien, denn sonst hätte es nicht die Gentoo-prefix Installation finden können die dort liegt.
Kenne mich bei Gentoo nicht aus, sehe aber keinen Anhaltspunkt für die Vermutung. Soweit ich sehe, werden die geladenen Module durchgegangen.
Grüße
Hallo,
Missverständnis: Ich arbeite unter MacOS. Ich habe nur in meinem Benutzerverzeichnis zusätzlich eine Linux Installation liegen, die ohne eigenen Kernel auskommt. Mein Testprojekt lag unter ~/ropetest/minimal_example.py die Gentoo-prefix installation liegt unter ~/Gentoo und ist in keinem PATH oder ähnlichem enthalten. Wenn ich da was machen möchte starte ich explizit eine eigene Umgebung dafür.
Soll heißen: rope prüft offenbar Dateien die nicht im entferntestem was mit der Datei zu tun hat, die ich offen hatte, sonst würde das Verzeichnis ja nicht im Traceback auftauchen. Und das erklärt auch warum das 5 minuten dauerte bis er es dann mit der Exception abgebrochen hat.
Kann ich irgendwie nachvollziehen was rope genau macht wenn ich den Befehl zum refactoring gebe? Ich hab keine Ahnung wie ich das debuggen kann.
Grüße, Dirk.

On 2011-07-19 19:35:20 +0000, Andreas Röhler said:
Kann ich irgendwie nachvollziehen was rope genau macht wenn ich den Befehl zum refactoring gebe? Ich hab keine Ahnung wie ich das debuggen kann.
Wie jedes andere Python-programm?
Grüße
Hallo
anscheinend gab es einen Fehler in meiner Python installation. Nachdem ich Python neu installiert habe funktioniert alles so wie es soll.
Grüße, Dirk.
participants (3)
-
Andreas Röhler
-
Dirk
-
Dirk Scharff