gobject-introspection覆盖导致导入错误
问题描述:
我在ubuntu raring上使用python2.7中的gobject-introspection,并在构建一些软件包时遇到导入错误。我已经分离出一组步骤最少复制它:gobject-introspection覆盖导致导入错误
-
拨打本地目录结构:
gi: __init__.py overrides: __init__.py
-
把标准的样板
from pkgutil import extend_path __path__ = extend_path(__path__, __name__) print __path__, __name__
两个
__init__.py
文件。 -
从包含当地的
gi
副本的目录,运行以下命令:python -c "from gi import repository"
-
我得到那个看起来像一个错误信息:
Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib/python2.7/dist-packages/gi/repository/__init__.py", line 25, in <module> from ..importer import DynamicImporter File "/usr/lib/python2.7/dist-packages/gi/importer.py", line 28, in <module> from .module import DynamicModule File "/usr/lib/python2.7/dist-packages/gi/module.py", line 37, in <module> from .overrides import registry ImportError: cannot import name registry
任何解释?我找不到任何有关预期行为的体面文件,因为gobject-introspection看起来是一个记录很差的项目。非常感谢帮助!
答
从Python文档:
的
__init__.py
文件都需要使Python视该 目录为一个包;这样做是为了防止 目录具有公共名称(如字符串),无意中隐藏了稍后在模块搜索路径中发生的有效模块。
只需从运行目录访问那些__init__.py
文件,就可以告诉解释器这是gi模块的实现。主要gi模块的任何用法都不会正确。
现在,它为什么打印错误来自/usr/lib
?因为在local/gi
中发现了gi
,但在/usr/lib/python2.7/dist-packages/gi/repository
中发现了gi.repository
。它正在运行/usr/lib/python2.7/dist-packages/gi/repository/__init__.py
。从那里,它会正确导入一些其他子模块,但是当它试图导入overrides
时,它会在gi/overrides
中找到您的本地存根。你的存根没有定义注册表,所以你失败了。
尝试并将registry='dumb_string'
放入gi/overrides/__init__.py
并查看错误消失。
其实,这是我尝试的第一件事情之一。问题是我实际上需要使用注册表来导入包。因此,如果我稍后尝试从gi存储库导入类似Gtk的东西,则会出现导入错误。从本质上讲,我试图找出正确的方式来做一个特定的gi存储库包的本地覆盖,以这样一种方式,即全球gi存储库信息下降。那有意义吗? – 2013-05-22 16:59:16
那是另一个问题,我不知道如何回答:( 祝你好运! – salicideblock 2013-05-26 14:19:18