4

ubuntu raring の python2.7 で gobject-introspection を使用していますが、いくつかのパッケージのビルド中にインポート エラーが発生します。それを複製するための最小限の手順を分離しました。

  1. ローカル ディレクトリ構造を作成します。

    gi:
            __init__.py
            overrides:
                    __init__.py
    
  2. 標準定型句を入れる

    from pkgutil import extend_path
    
    __path__ = extend_path(__path__, __name__)
    print __path__, __name__
    

    両方の__init__.pyファイルにあります。

  3. のローカル コピーを含むディレクトリから、gi次のコマンドを実行します。

    python -c "from gi import repository"
    
  4. 次のようなエラー メッセージが表示されます。

    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 は非常に文書化されていないプロジェクトのように見えるため、意図した動作の適切な文書を見つけることができません。助けていただければ幸いです。

4

1 に答える 1

1

Python ドキュメントから:

これらの__init__.pyファイルは、Python がディレクトリをパッケージを含むものとして扱うために必要です。これは、文字列などの共通名を持つディレクトリが、モジュール検索パスで後で発生する有効なモジュールを意図せず隠してしまうのを防ぐために行われます。

これらの__init__.pyファイルを実行中のディレクトリからアクセスできるようにするだけで、それが gi モジュールの実装であることをインタープリターに伝えることができます。メインの gi モジュールを使用しても正しく動作しません。

さて、なぜエラーが から来たものとして出力されるの/usr/libでしょうか? giで見つかったのでlocal/gigi.repositoryで見つかりました/usr/lib/python2.7/dist-packages/gi/repository。実行中/usr/lib/python2.7/dist-packages/gi/repository/__init__.pyです。そこから、他のいくつかのサブモジュールを正しくインポートしますが、インポートしようとするとoverrides、ローカルスタブがgi/overrides. スタブはレジストリを定義していないため、失敗します。

試してみてregistry='dumb_string'gi/overrides/__init__.pyエラーがなくなったことを確認してください。

于 2013-05-21T16:23:20.193 に答える