web-dev-qa-db-ja.com

Python 3-モジュールが見つかりません

次のファイル構造があります...

 > 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.を使用しています。

ここで何が欠けているか間違っていますか?

8
DimSarak
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ファイルを使用して実行してから実行すると、機能します。

1
Vishnudev

_fileBB.py_でコードを記述し、_fileAA.py_で定義されたvariables/functions/classesなどをインポートしようとしているので、実際には次のようにする必要があります。

  • まず、空の___init__.py_をBoo内に作成します。

  • 次に、次のようにインポートしてみます。

    _from ..modA.fileAA import <something>
    _

パッケージの作成に関する私の経験によれば、問題なく動作するはずです。

注:機能しない場合はコメントしてください。お手伝いしますが、これは発生しません。

0
hygull

これはほぼ確実に、スクリプトの実行元の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を使用してパスを調べます。

0
keredson