2016-07-06 11 views
1

という名前のモジュールません:my_provider.pyPythonの私が階層下のフォルダから読み取るしようとしているカスタムモジュール持って

import tests.settings_mock as settings 

例から

> project-source 
     /tests 
      /provider 
      my_provider.py 
     settings_mock.py 
     __init__.py 

私が呼んしようとしていますが、

project-source> python tests/provider/my_provider.py 

エラー:

コマンドラインから0
... ImportError: No module named settings_mock 

私はNo module named settings_mockをエラーとして処理し続けます。私はすでにproject_sourceパスをPYTHONPATHにエクスポートしました。私は、ルートに__init__.pyファイルを作成することでパッケージにテストを行いましたが、エラーに変更はありません。

プロジェクトのソース

>>> import tests.settings_mock as settings 
>>> print settings.storage_provider 
correct storage provider value 

をcd'ingとき、私はsettings_mock.py属性を印刷することができますが、ここで私のミスを指摘することができ、誰ですか?ありがとう!

+0

サブフォルダがパッケージ(つまり '__init __。py'を含む)であれば、相対インポートを使用できます:' from .. import settings_mock' – jbndlr

+0

空の** ___ init ___。py **をテストディレクトリに追加してください – dmitryro

+0

'__init __。py'はどこにありますか? –

答えて

1

小さな間違いが1つしかありません。サブフォルダを使用するには、質問に記載されたinit.pyではなく、__init__.pyが必要です。違いは__init__がPythonの組み込み関数であるのに対し、initはPythonの組み込み関数である点です。このファイルを各サブフォルダに置くと、pyhonインタプリタは、そのフォルダが初期化が必要な「パッケージ」であることを知らせます。

UPDATED: pythonは、通常、スクリプトが置かれているカレントディレクトリから実行されることに注意してください。実行可能なメインスクリプトがmy_provider.pyの場合、メインスクリプトはインポートしようとしているオブジェクトよりも下位のディレクトリにあるため、インポートする内容はわかりません。それを階層と考えてください。スクリプトはその下にあるものだけをインポートできます。 settings_mockがインポートする必要があるものがあれば、そのファイル内のすべてのものから実行可能ファイルを分離してみてください。

+0

申し訳ありませんが、SOの質問の書式設定は表示されませんでしたが、' __init __。py'これは問題ではありません)。 – Jenninha

+1

ありがとうございます。あなたの問題を再現できるかどうかがわかります。 –

+0

'settings_mock.py'をインポートする' project-source'ディレクトリでmain.pyを実行しているときに、セットアップで問題を再現できませんでした。どこからmain.pyファイルを実行していますか? –

関連する問題