次のファイル構造があります...
> Boo
> ---modA
> ------__init__.py
> ------fileAA.py
> ---modB
> ------__init__.py
> ------fileBB.py
FileBB.pyの中にいるとき
from modA.fileAA import <something>
次のエラーが発生します。
from modA.fileAA import <something>
ModuleNotFoundError: No module named 'modA'
__init__.py
ファイルは空で、Python 3.を使用しています。
ここで何が欠けているか間違っていますか?
main_package
├── __init__.py
├── modA
│ ├── fileAA.py
│ └── __init__.py
└── modB
├── fileBB.py
└── __init__.py
ルートディレクトリに__init__.py
を作成し、次のようにインポートを使用します
from main_package.modA.fileAA import something
main_package
内のdriver
ファイルを使用して実行してから実行すると、機能します。
_fileBB.py
_でコードを記述し、_fileAA.py
_で定義されたvariables/functions/classesなどをインポートしようとしているので、実際には次のようにする必要があります。
まず、空の___init__.py
_をBoo内に作成します。
次に、次のようにインポートしてみます。
_from ..modA.fileAA import <something>
_
パッケージの作成に関する私の経験によれば、問題なく動作するはずです。
注:機能しない場合はコメントしてください。お手伝いしますが、これは発生しません。
これはほぼ確実に、スクリプトの実行元のPYTHONPATH
の問題です。一般的にこれは動作します:
$ ls modA/
fileAA.py __init__.py
$ cat modA/fileAA.py
x = 1
$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from modA.fileAA import x
>>> x
1
sys.path
を使用してパスを調べます。