2016-08-10 16 views
0

Pythonのインポートを使用するときに問題が発生しました。完成したモジュールを書きました。それは、それ自体がいくつかのサブモジュールを使用しています(それらはインポートされています)。サブモジュールからサブモジュールをインポートするPython

module: 
    main_class.py 
    submodule1.py 
    .... 

今、私は別のsupermoduleでこの完成モジュールを使いたいので、フォルダ構造は、しかし、今モジュール内main_class.pyのコードで使用されているすべての輸入は失敗し、この

supermodule: 
    main_class_super.py  -- this class imports module.main_class 
    module: 
     main_class.py 
     submodule1.py 
     .... 

のように変更します(インポートは今ではmain_class_super.pyの名前空間で動作するからだと思います)

ソース全体を再構成することなくこの問題を解決するにはどうすればよいですか?


具体的なエラー:私のmain_class.py

私はラインを使用します。そのスーパークラスを実行すると

import module.main_class 

:私はラインを使用して、私のsupermodule.py

import submodule1 

を輸入品module.main_classもちろんimport submodule1行も実行されますが、名前空間がsupermodule.pyのモジュールが見つからないため、失敗します。

答えて

1

あなたのpython 2上にある場合は、あなたのファイルにfrom __future__ import absolute_importを追加する必要があります(3上で必要とされていない)ので、あなたがあなた

  • は必ずすべて行う必要があります。これによるとGuido states in PEP 328

    などの輸入を行うことができますあなたのパッケージフォルダがmain_class.pyでインポート可能な

  • としてそれらをマークすることで__init__.pyを持っている:でimport submodule1またはimport module.submodule1を交換しますmain_class_super.pyで

  • from .module import main_class

あなたが任意の外装構造を気にする必要はありません。この方法でimport module.main_classを交換してください。

Python 2.5で絶対および明示相対インポートを使用するオプションwas added

+0

ああ、私はこれが私を助けることができる方法をかなり得ていないと思います。私のフォルダ構造を考えると、supermodule.pyの中でsubmodule1.pyをどのようにインポートするのですか? – WodkaRHR

+0

編集した回答を明示的な解決策を追加する – janbrohl

+0

もう一度迷惑をかけて申し訳ありませんが、別の問題が発生しました。これらのサブモジュールの中で、いくつかのモジュールは同じ他のモジュールをインポートします(例えば、サブモジュール1はサブモジュール2と3をインポートし、サブモジュール2はサブモジュール3もインポートします)。 – WodkaRHR

関連する問題