2017-06-27 5 views
0

私はPython 3.6.0を使用しており、複数のディレクトリにわたるプロジェクトに問題があります。ディレクトリ構造は次のようになります。別のディレクトリにあるプログラムから関数を実行すると、そのファイルが見つかりません

私のフロントエンドのすべての機能が終了し、ローカルでテストし、 /project/frontendに住んでいると私は今、だから私は変更 /project

に住んでいる私のバックエンドとそれを接続したいされ

/project 
/project/frontend 

/project/frontendへと行が含まれていdisplay_page.py走っ:

sys.path.append('../') 
from text_algorithms import process_text 

..where text_algorithms.py/projectに座って、そこから実行すると正常に動作しますが。 text_algorithms.py/projecttext_algorithms.pyから実行するか、またはインポートされるときに、それは良い30秒の実行を開始し、その後、問題は決してありません、それは/projectに座っているのピクルスファイルを見つけることができなかったことcomplaing、クラッシュした行が含まれています。

with open('english_vocab.pickle', 'rb') as f: 
    v = pickle.load(f) 

は、だから私はそれが以下のディレクトリからpython frontend/display_page.pyを実行して、「愚か者」私が考えていたが、それは別のエラーを作成し、すなわち、

ModuleNotFoundError: No module named 'text_algorithms' 

は、この問題を解決する方法を誰もが知っていますか? - どこからファイルを呼び出すかに応じてファイルを探す場所が変更されないようにする方法。この状況に対処する適切な方法はありますか?

どこからでもファイルを見つける必要があります。

+0

はルートとそのすべてのサブディレクトリで '__init __ py'を持っていますか? – EvgenyKolyakov

+0

私はPython 3.3以降でこれをする必要はありません。https://stackoverflow.com/questions/37139786/is-init-py-not-required-for-packages-in-python-3 – cardamom

+0

'sys.path'ハックを使い、相対パスを使わないでください:' sys.path.append( '../') '。ルート環境変数にルートディレクトリを追加するほうがよいでしょう。仮想環境の中にあるかもしれません。 –

答えて

1

あなたのプロジェクトのはずimportその他のモジュール:

from frontend.text_algorithms import process_text 

text_algorithmsにあなたがこのモジュールに対する相対ファイルにアクセスしたい場合、あなたは特定のモジュールへのファイルパスが含まれている__file__の値を使用する必要があります。 os.pathを使用すると、ディレクトリを取得してデータファイルパスに参加させることができます。例えば

:。

file_path = os.path.join(
    os.path.split(__file__)[0], 
    'some.file' 
) 
+0

ありがとう私は 'osで何か考えています。パス 'と' __file__'はそれをテストして修正します – cardamom

+0

はい、ありがとう、ありがとう。なぜ私はそれを動作させるために49分かかったのですか?ドット付きのインポートステートメントが 'import..from'メソッドと異なるとは思わない** **しかし、それらは4行の' os.path .join ... 'の下にあるディレクトリのファイルでそれを行いました。 'dictionary_file ='のようなものを書いていて、その4行はパスを変更していないことを認識していますが、それがどこから呼び出されたとしても、ファイルへの正しいパスを持つ文字列を作成しています。 – cardamom

関連する問題