2 Stimmen

Wie kann ich identifizieren, auf welches Paket sich AttributeError: 'module' bezieht?

Ich versuche, eine Python-Pyramiden-App, die ich schreibe, von einem Server auf einen anderen zu verschieben. Ich habe den Code aus der Quellkontrolle ausgecheckt und ein python setup.py develop ausgeführt, um die Umgebung vorzubereiten, aber wenn ich versuche, pserve development.ini auszuführen, erhalte ich den folgenden Traceback:

2013-02-27 20:38:20,269 INFO  [pyramid_scss][MainThread] fügt den Asset-Pfad hinzu /home/pgrace/repos/Asterisk-WebApps/Cedar-Root/opt/cedar/cedar/assets/scss
Traceback (most recent call last):
  File "/home/pgrace/venvs/pyramid/bin/pserve", line 8, in 
    load_entry_point('pyramid==1.4', 'console_scripts', 'pserve')()
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/pyramid/scripts/pserve.py", line 50, in main
    return command.run()
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/pyramid/scripts/pserve.py", line 304, in run
    global_conf=vars)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/pyramid/scripts/pserve.py", line 328, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
    return context.create()
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/paste/deploy/loadwsgi.py", line 710, in create
    return self.object_type.invoke(self)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/paste/deploy/loadwsgi.py", line 146, in invoke
    return fix_call(context.object, context.global_conf, **context.local_conf)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/paste/deploy/util.py", line 56, in fix_call
    val = callable(*args, **kw)
  File "/home/pgrace/repos/Asterisk-WebApps/Cedar-Root/opt/cedar/cedar/__init__.py", line 18, in main
    config.include("pyramid_scss")
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/pyramid/config/__init__.py", line 773, in include
    c(configurator)
  File "/home/pgrace/venvs/pyramid/lib/python2.6/site-packages/pyramid_scss/__init__.py", line 88, in includeme
    scss.LOAD_PATHS = ','.join([scss.LOAD_PATHS, ','.join(load_paths)])
AttributeError: 'module' object has no attribute 'LOAD_PATHS'

Jetzt kann ich erkennen, dass das Problem in pyramid_scss liegt, aber soweit ich das beurteilen kann, ist der referenzierte Code in Ordnung, als ob die module-Klasse die LOAD_PATHS-Direktive nicht enthält. Ich versuche herauszufinden, auf welches Modul der Verweis module zeigt, damit ich den Code überprüfen kann, ob mir eine Abhängigkeit fehlt oder ähnliches. Hat jemand Ideen, wie ich herausfinden kann, auf welches Modul der Verweis module zeigt, damit ich diesen Code überprüfen kann?

BEARBEITEN: Der Fehler tritt in der includeme-Definition auf, die aus dem, was ich gelesen habe, automatisch jedes Mal eingefügt wird, wenn ein auf Pyramide spezifisches Paket instanziert wird... vielleicht? Auf jeden Fall wird gesagt, dass scss.LOAD_PATHS nicht existiert, ja, aber es gibt keine scss-Klasse in den Paketen pyramid_scss oder pyScss, was mich dazu veranlasst zu fragen, ob es eine andere Klasse gibt, die spät gebunden wird oder ähnliches.

def includeme(config):
    load_paths, static_path = _get_import_paths(config.registry.settings)
    scss.LOAD_PATHS = ','.join([scss.LOAD_PATHS, ','.join(load_paths)])
    scss.STATIC_ROOT = static_path
    config.add_renderer('scss', renderer_factory)

Die Klasse Scss in pyScss enthält tatsächlich eine LOAD_PATHS-Direktive, aber ich sehe nicht, wo das Objekt scss an eine Scss-Klassendefinition gebunden ist. Ich frage mich, ob etwas im obigen def includeme fehlt, das Teil der Antwort sein könnte, aber dann stellt sich die Frage -- das hat auf dem anderen Rechner richtig funktioniert, warum bricht es jetzt ab? Es fehlt noch etwas, das ich einfach nicht bemerke.

3voto

David Robinson Punkte 75919

Beim Untersuchen des Codes für das scss-Paket scheint es, als ob die globale Variable LOAD_PATHS von der Datei __init__.py nach config.py verschoben wurde.

Daher könnten Sie, wenn Sie versuchen möchten, die pyramid_scss-App zu reparieren, die Zeile 88 von pyramid_scss/__init__.py wie folgt ändern:

scss.config.LOAD_PATHS = ','.join([scss.config.LOAD_PATHS, ','.join(load_paths)])

2voto

Martijn Pieters Punkte 953257

Die vorletzte Zeile informiert Sie darüber, welches Modul betroffen ist:

    scss.LOAD_PATHS = ','.join([scss.LOAD_PATHS, ','.join(load_paths)])
AttributeError: 'module' object has no attribute 'LOAD_PATHS'

Also hat das scss Modul kein LOAD_PATHS Attribut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X