2016-11-12 9 views
0

にどこからでもアクセスできるようにするデータのフォルダを設定するにはどうすればよいのセットアップ全てのモジュールからアクセスプロジェクト全体の「データ」フォルダを、?プログラムには1つのエントリポイントがないので、グローバル(dataFolderPath)のようなことはできません。私はすべてのモジュールがデータフォルダがどこにあるか知ることを望んでいます(各モジュールのパスをハードコーディングせずに!)ので、必要なデータをロードして書き込むことができます。私は、Mac上でPython 3.5を使用しています。はどのように、Pythonのプロジェクトのpythonプロジェクトで

ありがとう!

+0

こんにちはみんな!なぜdownvote? :-) – Ant

+0

このデータフォルダは、Pythonモジュールか、データを含むファイルのコレクションですか? – Rodrigo

+0

@ rod085データを持つファイルの集まりです(このデータはpickle.dumpで保存されたpythonオブジェクトのインスタンスかもしれません) – Ant

答えて

0

あなたはむしろ、データプロバイダとして動作するモジュールを作成する必要があります。このモジュールだけがあなたのデータがどこにあるかに関心があります。

あなたの現在のアプローチは間違っています。データの場所やフォーマットを変更する場合は、このデータを使用するすべてのモジュールを変更する必要があります。

//編集:今、あなたは、いくつかのプロジェクトのサブディレクトリへの絶対パスを持っている

import data_module 
import os 

path = os.path.dirname(data_module.__file__) 

: そこにモジュールを作成した後、あなたはそれがある場所だ得ることができます。ここから相対パスを使用してプロジェクト内の他のディレクトリを指すことができます。

+0

しかし、データの種類が異なり、一部のモジュールではデータを読み込む必要があり、書き込む必要があるものもありますいくつかのデータなどがあります。すべてが1つのモジュールを持つことはちょっと混乱しているようです。データの種類も異なります。データのフォーマットを変更すると、そのタイプのデータを扱うモジュールを変更するだけで済みます。しかし、わかりやすくするために、すべてのデータを1つのフォルダ(または1つのフォルダのサブフォルダ)に保存します。あなたは同意しない? – Ant

+0

@Ant:更新された回答を確認してください – woockashek

+0

ありがとうございます。私はこの可能性を認識していましたが、各モジュールの相対パスをハードコードする必要があるため、私はそれを破棄しました(モジュールの場所やプロジェクトフォルダ内のデータフォルダの場所を変更すると、 )。 – Ant

0

これはpython固有のものではありませんが、プログラム間で設定をグローバルに共有したい場合は、MYPROJECT_DATA_PATHのような環境変数を設定することができます。あるいは、すべてのプログラムがその場所を知っている設定ファイルを書くこともできます。または、両方とも、設定ファイルのパスを持つ環境変数。必要に応じて微調整できます。データはあなたのPythonモジュールに比べて設置取得するために

+0

Uhm、これは興味深いことですが、私はこの些細なことのために環境変数を混乱させないことを望んでいました。 – Ant

0

、あなたはpkgutil.get_data()またはsetuptoolsのpkg_resources.resource_string()を使用することができます。これはあなたのmodule is packaged as a zip archiveであっても機能します。

ユーザデータを置くための適切な場所を見つけるために、あなたは可能性がありuse appdirs module for portability

import appdirs # $ pip install appdirs 

user_data_dir = appdirs.user_data_dir("App name", "Author") 

特定のアプリケーションのための最適な方法でデータを置く場所のロジックの重複を避けるために、あなたが作成することができますそれを担当するオブジェクトです。あなたは、例えば(簡単な例で)直接from custom_app import configそれをインポートするか、初期化時にそれを構築し、アプリケーションのオブジェクトapp.configの属性として、またはグローバル関数custom_app.get_config()。存在しないかのようにそれを設定することができます。

データパスを取得するには、configオブジェクト尋ねる:/ pkgutil/pkg_resourcesの助けを借りずにconfigが/で設定ファイル(例えば、~/.config/custom_app/config.yml)から派生した値、環境変数(CUSTOM_APP_DATA_DIR)、コマンドラインオプションを返すことがconfig.get_data_dir()appdirsモジュール。

これは設定情報を取得する唯一の方法ではありませんが、多くの場合に適しています。

関連する問題