2017-07-11 18 views
0

私は簡単な質問があります。 ファイル "dev1_blob"を必要とするpythonモジュール "dev1.py"を持っています"ローカル"ディレクトリのファイルにアクセスするPythonモジュール

すべてが1つのディレクトリにある場合。 MY_APPは、それが正常に動作

from dev1 import func1 

ようDEV1をロードします。関数func1は 『device_blob』にアクセスするために実行したときに、私はディレクトリにit.Iでのinitの.pyと「./dev_files」をdev1.py移動したい しかし

from dev_files.dev1 import func1 

としてdev1.pyを読み込むことができます - それはbarfsとして:

resource not found .. 

私は何かが不足していると信じてこれは基本的です。 私は、pythonの偉大な心が、すべてが__file__(cwd)を参照するようにして、実行されている場所に基づいてdev1.pyを修正するように強制する理由を理解できません。つまり、dev1.pyのファイルを参照してください:'dev_files/device_blob'

私はそれをこのように動作させることができますが、それはコードを書くことのまったく不条理な方法です。 モジュールファイルの横または次のツリーにあるファイルに簡単にアクセスできますか?

+0

何が 'device_blob'ですか? – pythad

+0

普通のファイル –

答えて

1

相対パスは、Pythonの大きな欠陥の1つです。

このユースケースでは、open('../dev_files/device_blob')に電話をかけて、最初にdirに戻ることができます。

私の一般的な解決策は、プロジェクトディレクトリへの絶対パスを含む "project.py"ファイルを持つことです。それから私はopen(os.path.join(PROJECT_DIR, 'dev_files', 'device_blob'))に電話します。

+0

これでは一般的な問題は解決しません。もう少し目に見えますが、1つではなく2つのアイテムを維持する必要があります。たぶんクリーンな解決策はありません - それは根本的に壊れています。なぜそれが言語で修正されていないのかわかりませんが、修正するのは難しいことではありません。 –

+0

メンテナンスする2つのアイテムは何ですか? "project.py"ファイル、その他何か? – ddg

+0

1つの方法は、以前に書いたことを行うことです。つまり、コード内の相対パス(ハード・リレーションを追加する必要があるファイル)をハード・コードします。あなたの提案は、そのままにしてからハード・コード情報の別の部分..私は維持するための2番目の項目としてそれを参照してください。しかし、これがPythonの欠陥であるという提案と明確化のおかげで、 –

関連する問題