Python 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

我在ubuntu raring上使用python2.7中的gobject内省,在构建一些包时遇到导入错误。我已经分离出一组最小的步骤来复制它:

  • 创建本地目录结构:

    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存储库信息。这有意义吗?那是另一个问题,我不知道如何回答:(祝你好运!