Python gobject内省覆盖会导致导入错误
我在ubuntu raring上使用python2.7中的gobject内省,在构建一些包时遇到导入错误。我已经分离出一组最小的步骤来复制它:Python gobject内省覆盖会导致导入错误,python,ubuntu,python-2.7,gobject-introspection,Python,Ubuntu,Python 2.7,Gobject Introspection,我在ubuntu raring上使用python2.7中的gobject内省,在构建一些包时遇到导入错误。我已经分离出一组最小的步骤来复制它: 创建本地目录结构: gi: __init__.py overrides: __init__.py 把标准样板放进去 from pkgutil import extend_path __path__ = extend_path(__path__, __name__) print __pa
gi:
__init__.py
overrides:
__init__.py
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
print __path__, __name__
在两个\uuuu init\uuuu.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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/dist-packages/gi/repository/_init__.py”,第25行,在
从..进口商导入DynamicImporter
文件“/usr/lib/python2.7/dist packages/gi/importer.py”,第28行,在
从.module导入DynamicModule
文件“/usr/lib/python2.7/dist packages/gi/module.py”,第37行,在
从。覆盖导入注册表
ImportError:无法导入名称注册表
有什么解释吗?我找不到任何关于预期行为的像样的文档,因为gobject自省似乎是一个文档记录得很差的项目。非常感谢您的帮助 来自Python文档:
\uuuu init\uuuu.py
文件是使Python处理
包含包的目录;这样做是为了防止
无意中使用公用名称(如字符串)的目录
隐藏稍后在模块搜索路径上出现的有效模块
只需从运行目录中访问这些\uuuu init\uuuuuuuy.py
文件,就可以告诉解释器这是gi模块的一个实现。主gi模块的任何使用都将无法正常进行
现在,为什么它会将错误打印为来自/usr/lib
?因为gi
在local/gi
中找到,但是gi.repository
在/usr/lib/python2.7/dist packages/gi/repository
中找到。它正在运行/usr/lib/python2.7/dist packages/gi/repository/\uuuu init\uuuu.py
。从那里,它正确地导入了一些其他子模块,但是当它尝试导入覆盖
时,它会在gi/overrides
中找到您的本地存根。您的存根没有定义注册表,因此您有失败的机会
试着把
registry='dumb\u string'
放在gi/overrides/\uu init\uuuuuuuuuuy.py
中,看看错误是否消失了。实际上,这是我尝试的第一件事。问题是我实际上需要使用注册表来导入包。因此,如果我以后尝试从gi存储库导入类似Gtk的东西,我会得到一个导入错误。从本质上讲,我正在尝试找到正确的方法来对特定的gi存储库包进行本地覆盖,这样就可以忽略全局gi存储库信息。这有意义吗?那是另一个问题,我不知道如何回答:(祝你好运!