2017-02-16 12 views
1

私はサブパッケージをインポートするパッケージからモジュールをインポートしようとしています。ここでのサンプルコードは次のようになります。この場合、Python3 subsubdirectoryファイルをインポートするサブディレクトリファイルをインポートするにはどうすればよいですか?

main_directory 
    - main.py 
    subdirectory 
     - __init__.py 
     - test.py 
     subsubdirectory 
      - __init__.py 
      - test2.py 

main.py: 
    from subdirectory import test 
    test.foo1() 

test.py: 
    from subsubdirectory import test2 
    def foo1(): 
     print("foo1") 
     test2.foo2() 

test2.py: 
    def foo2(): 
     print("foo2") 

、私は

from .subsubdirectory import test2 

from subsubdirectory import test2 

を変更した場合、私はそれがダイレクトパスだと思うので、それは動作しますか? しかし、私は私のサブディレクトリに移動してのpython3を実行し、エラーがスローされますtest.py:

ModuleNotFoundError: No module named '__main__.subsubdirectory'; '__main__' is not a package 

あなたは何が起こったのか説明できますか?

+1

[1つのディレクトリに__init__.pyを持つパッケージでも、非パッケージの相対インポートを試みました](http://stackoverflow.com/questions/14664313/attempte d-relative-in-in-non-package-with-init-py-in) –

答えて

0

相対インポートを使用する場合は、パッケージの方法でスクリプトを実行する必要があります。

__init__.pymain_directoryではありませんので、万が一、あなたがmain_directoryは、パッケージ名になりたい場合は、パッケージがsubdirectory

cd ./main_directory/ 
python -m subdirectory.test 
python -m subdirectory.subsubdirectory.test2 

で、あなたが実行し、その後、main_directory__init__.pyを追加する必要がありますスクリプト:

cd ./main_directory/../ 
python -m main_directory.subdirectory.test 
python -m main_directory.subdirectory.subsubdirectory.test2 
関連する問題