2017-03-15 1 views
0

編集:__init__.pyファイルが含まれていますが、私はPython 3を使用しています - それは問題ではないと思います。Pythonでクラスをインポートできないのはなぜですか?

別の編集:config.pyのものは問題なくインポートされます。もし私が単にfrom cache import Cacheを省略すると、エラーは発生しません。興味深いことに、インポート時にエラーが発生しないconfig.py

ここで何が間違っているのかわかりません。特定のクラスをインポートしようとするとエラーが発生します。

app/ 
    dir1/ 
     config.py 
     cache.py 
     manager.py 
     __init__.py 
    test/ 
     test.py 
     __init__.py 

cache.py:

import sys 
import os 
sys.path.append(os.path.dirname(__file__)) 
from manager import Manager, AnotherClass 
from config import Config 

manager.py

import sys 
import os 
sys.path.append(os.path.dirname(__file__)) 
from config import Config 
from cache import Cache 

test.py

ここに私のプロジェクトのレイアウトは次のようになります。

だから私はtest.pyを実行したとき、私はこれを取得:

File "/path/to/project/app/dir1/<module> 
from cache import Cache 

ImportError: cannot import name 'Cache' 

from manager import Manager line 5, 

でもうまくconfig.Config負荷、そこにエラーなしけれども、しかし、すぐに私はそれが急に見つけることができませんcache.Cacheまたはインポートをインポートしようとして任意のクラスはcache.pyです。すべてのファイルに同じ権限があります。誰かが私に何が間違っていると教えてくれる?

+0

モジュール内に '__init __。py'ファイルはありません。 –

+0

関連 - [何のための__init__.py?](http://stackoverflow.com/questions/448271/what-is-init-py-for_) – Lix

+0

ディレクトリが既にsys.pathにあるかどうかを確認する必要があります。それは単純なリストなので、追加し続けると非常に大きくなるでしょう。 –

答えて

3

あなたのモジュールに

app/ 
    __init__.py 
    dir1/ 
     __init__.py 
     config.py 
     cache.py 
     manager.py 
    test/ 
     test.py 

__init__.pyファイルが欠落しているし、代わりにsys.pathいじりの2は、ラインが必要な場合があります

from .config import Config 
from .cache import Cache 

Pythonのような相対的なインポートを行う必要があります

from __future__ import absolute_import 
それらのインポートの前に

関連する問題