開発モードでは、次のディレクトリツリーがあります。
| my_project/
| setup.py
| my_project/
| __init__.py
| main.py
| conf/
| myproject.conf
ConfigParser を使用して、myproject.conf
ファイル。
私のコードでは、良いパスでファイルをロードするのは簡単です:my_project/conf/myproject.conf
問題は次のとおりです。setup.pyを使用してプロジェクトをインストールすると、構成ファイルが/etc/my_project/myproject.conf
と/usr/lib/python<version>/site-packages/my_project/
。
my_project/conf/myproject.conf
「本番」モードのプロジェクトのファイル。ローカルファイル(my_project/conf/myproject.conf
)「開発」モード。
さらに、可能な場合はポータブルにしたいと思います(たとえば、Windowsで作業します)。
それを行うための良い習慣は何ですか?
構成ファイルがどのように機能するかを見ましたか? 「rc」ファイルは、時々呼ばれるので読んでください。 「bashrc」、「vimrc」など.
通常、構成ファイルのマルチステップ検索があります。
ローカルディレクトリ。 ./myproject.conf
。
ユーザーのホームディレクトリ(~user/myproject.conf
)
標準のシステム全体のディレクトリ(/etc/myproject/myproject.conf
)
環境変数(MYPROJECT_CONF
)
Pythonインストールは最後に見る場所です。
config= None
for loc in os.curdir, os.path.expanduser("~"), "/etc/myproject", os.environ.get("MYPROJECT_CONF"):
try:
with open(os.path.join(loc,"myproject.conf")) as source:
config.readfp( source )
except IOError:
pass
appdirs パッケージは、さまざまなプラットフォームにインストールされたアプリの標準的な場所を見つける上で素晴らしい仕事をします。開発者に何らかの「アンインストール済み」ステータスを検出または許可するように拡張するのが理にかなっているのだろうか。
setuptools
を使用している場合は、 非パッケージデータファイルを使用 の章を参照してください。自分でファイルを検索しようとしないでください。
もう1つのオプションは、すべての.cfg
および.ini
ファイルをホームディレクトリに保持することです(「boto」と同様)。
import os.path
config_file = os.path.join(os.path.expanduser("~"), '.myproject')
私はそれに対処するためのきれいな方法があるとは思わない。開発モードで動作する「ローカル」ファイルの存在をテストすることを選択できます。それ以外の場合は、本番パスにフォールバックします。
import os.path
main_base = os.path.dirname(__file__)
config_file = os.path.join(main_base, "conf", "myproject.conf")
if not os.path.exists(config_file):
config_file = PROD_CONFIG_FILE # this could also be different based on the OS