2017-12-19 1 views
1

私はすでにこれに似た質問がたくさんあることを知っていますが、残念ながら私の問題にどのように適用するか分かりませんでした。Python:SystemError親モジュールがロードされておらず、相対インポートを実行できません

次のように私のプロジェクトの構造は次のとおりです。

Project 
|___ maincode 
     |___ __init__.py 
     |___ losses.py 
     |___ bin 
      |___ __init__.py 
      |___ train.py 

、その後train.pyに、私は次のコードを持っている:私はプロジェクトのメインディレクトリProject/からスクリプトtrain.pyを実行している場合今

# Allow relative imports when being executed as script. 
if __name__ == "__main__" and __package__ is None: 
    __package__ = "maincode.bin" 
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..')) 

    from .. import losses 

def main(args=None): 
    #some code here 

if __name__ == '__main__': 
    main() 

をつまり、端末で次のコマンドを実行します。

maincode/bin/train.py 

は、私は、次のエラーを得る:

SystemError: Parent module 'maincode.bin' not loaded, cannot perform relative import

Iは、Python 2.7.6とPython 3.5.2の両方を試み、同じエラーを得ました。

助けてください。前もって感謝します!

+0

はあなただけtrain.pyまたはアプリケーション全体を実行しますか? – edlee

+0

@edleeメインコードは 'train.py'にあります。これはプロジェクトの残りの部分に依存しますので、アプリケーション全体を実行する必要がありますか? – Khue

+0

これは何を意味するのでしょうか?なぜそうでないのか分かりません。 – user2357112

答えて

1

パッケージ全体ではなく、そのモジュールだけを実行したい場合は、 python -m maincode.bin.trainはPythonにモジュールとして実行するよう指示します。

パッケージ全体を実行したい場合は、ディレクトリをProject:cd /path/to/projectに変更してからpython maincodeを実行し、コードが正しく設定されている場合はtrain.pyを実行する必要があります。

それ以外の場合は、スクリプトの外にスクリプトを移動し、独自のスクリプトで実行します。

この理解パッケージに

詳細はここで見つけることができます: Relative imports for the billionth time

+0

'python -m maincode.bin.train'を試してみました。 – Khue

関連する問題