如何识别AttributeError: 'module'指的是哪个包?

2 投票
2 回答
622 浏览
提问于 2025-04-17 17:21

我正在尝试把我写的一个Python Pyramid应用从一台服务器迁移到另一台。我从源代码管理系统中检查了代码,并运行了python setup.py develop来准备环境,但当我尝试运行pserve development.ini时,出现了以下错误信息:

2013-02-27 20:38:20,269 INFO  [pyramid_scss][MainThread] adding asset path /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 <module>
    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'

现在,我可以看出问题出在pyramid_scss这个模块上,但根据我所了解的,它所引用的代码是正常的,感觉就像module类里没有LOAD_PATHS这个指令。我正在试图弄清楚它指的是哪个模块,以便查找是否缺少某个依赖项或其他问题。有没有人知道我该如何找到module引用指向的地方,以便检查那段代码?

编辑: 错误出现在includeme这个定义中,根据我所了解的,每次实例化一个Pyramid特定的包时,它会自动包含这个定义?也许吧?无论如何,它在说scss.LOAD_PATHS不存在,但在pyramid_scsspyScss这两个包里都没有scss类,这让我怀疑是否有其他类是延迟绑定的。

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)

在pyScss中的Scss类确实包含一个LOAD_PATHS指令,但我没有看到对象scss是如何绑定到Scss类定义的。我在想,上面def includeme的定义中是否缺少了什么,这可能是答案的一部分,但这又引出了一个问题——这在另一台机器上工作得很好,为什么现在会出问题?还有其他我没有注意到的东西。

2 个回答

2

倒数第二行告诉你哪个模块受到了影响:

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

所以说,scss模块没有LOAD_PATHS这个属性。

3

通过查看scss包的代码,发现LOAD_PATHS这个全局变量可能已经从__init__.py文件移到了config.py文件里。

所以,如果你想尝试修复pyramid_scss这个应用程序,可以把pyramid_scss/__init__.py文件的第88行改成:

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

撰写回答