サブディレクトリ内のデータ ファイルを開く必要があるモジュールを含む Python パッケージを作成しています./data/
。現在、ファイルへのパスはクラスと関数にハードコードされています。ユーザーのシステム上のどこにインストールされているかに関係なく、サブディレクトリにアクセスできる、より堅牢なコードを作成したいと考えています。
さまざまな方法を試しましたが、今のところうまくいきません。「現在のディレクトリ」コマンドのほとんどは、モジュールのディレクトリではなく、システムの Python インタープリターのディレクトリを返すようです。
これは些細でよくある問題のように思えます。しかし、どうも解決できないようです。問題の一部は、データ ファイルが.py
ファイルではないため、インポート関数などを使用できないことです。
助言がありますか?
現在、私のパッケージ ディレクトリは次のようになっています:
/
__init__.py
module1.py
module2.py
data/
data.txt
data.txt
からアクセスしようとしていますmodule*.py
!
ベストアンサー1
これを行う標準的な方法は、setuptools パッケージと pkg_resources を使用することです。
次の階層に従ってパッケージをレイアウトし、このリンクに従って、データ リソースを指すようにパッケージ セットアップ ファイルを構成できます。
http://docs.python.org/distutils/setupscript.html#パッケージデータのインストール
その後、次のリンクに従って、pkg_resources を使用してこれらのファイルを再度検索して使用することができます。
http://peak.telecommunity.com/DevCenter/PkgResources#基本リソースアクセス
import pkg_resources
DATA_PATH = pkg_resources.resource_filename('<package name>', 'data/')
DB_FILE = pkg_resources.resource_filename('<package name>', 'data/sqlite.db')