web-dev-qa-db-ja.com

__init__。pyがローカルモジュールを見つけることができません

http://pythoncentral.io/how-to-create-a-python-package/ で簡略化された例を借用

次のような類似のファイル構造があります。Mammals.pyとBirds.pyは、同じ名前のクラスを定義しています。

Project/
  Animals/
    __init__.py
    Mammals.py
    Birds.py

Project/ディレクトリ内で__init__.pyが空の状態でipythonインタープリターを実行すると、以下が機能します。

from Animals.Mammals import Mammals
x = Mammals()
x.printMammals()

from Animals import Mammalsの代わりにfrom Animals.Mammals import Mammalsを書きたいのですが。そのための方法は、__init__.pyファイルの内容を次のようにすることだと思います。

from Mammals import Mammals
from Birds import Birds

ただし、これを行うと、同様にProject/ソースのipythonインタープリター内から、次の入力でエラーが発生します。

In [1]: from Animals import Mammals
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-6d651848af9b> in <module>()
----> 1 from Animals import Mammals

/Users/username/Project/Animals/__init__.py in <module>()
----> 1 from Mammals import Mammals
      2 from Birds import Birds

ImportError: No module named 'Mammals'

私が犯している単純な間違いがあるように感じますが、見つけることができません。助けてくれてありがとう!

7
Darren McAffee

Animalsディレクトリ内の__init__.pyに次のコードを入力します。

Python 3.x:

from .Mammals import Mammals
from .Birds import Birds

2.xの場合:

from __future__ import absolute_import
from .Mammals import Mammals
from .Birds import Birds
22
masnun