2016-04-05 11 views
3

状況:
を考えると、このプロジェクト構造:Pythonの3 - はImportError:名前のないモジュール

project/ 
    app/ 
    __init__.py (empty) 
    stamp.py 
    tests/ 
    test.py 
    main.py 
main.py

test.py私は経由stamp.pyの機能をインポートしようとしています:

from app.stamp import Timestamp 

Timestampmain.pyにインポートされますが、test.pyでは取得できませんsのエラー:

ImportError: No module named 'app' 

質問
どうやっtest.pystamp.pyののpython 3.5インポート機能でできますか?

+0

どのようにしてtest.pyを起動しますか? –

+0

via Terminal:python tests/test.py test.pyには何も想像できません。どうしてインポートを行うのかを理解しようとしています – DavidR

+0

どのようにしてtest.pyの中のstamp.pyを呼び出していますか? – idjaw

答えて

2

必ずフォルダのテストを行うには含まれてい__init__.pyコードの下

があなたのproject

にモジュールとファイルを検索して行きます test.py

Pythonでsys.pathにプロジェクトprojectのパスを追加し

import sys 
sys.path.append("/path/to/project") 
from app.stamp import Timestamp 
+0

Thx all。推奨するように、 'sys'を' os'と同様にインポートし、次のコードをtest.py 'sys.path.append(os.path.abspath( '。'))'に追加しました。それはすべての '__init __。py'ファイルなしでも動作します – DavidR

+0

@DavidRは喜んでそれを知っています:) \ __ init__.pyはパッケージとして扱われる通常のディレクトリを作成します – haifzhan

+0

' __init __。py'ファイルはPython 3のあらゆる利点を提供しますもはや必要ありません – DavidR

0

project/がであることを確認してくださいあなたのPYTHONPATH、入れてproject/ディレクトリ内のファイル__init__.py、その後、あなたがfrom project.app.stamp import Timestampを呼び出すことができるようになります。