3

Django 設定ファイルの仕組みと同様に、*.py ファイルを使用して変数を取得し、Python アプリケーションの複数のインポートでそれらを使用しようとしています。

設定ファイルの例:

DB_NAME = 'foo'
DB_TABLE = 'bar'
#Lots of other variable names and values here

この方法の利点は、さまざまな設定を非常に迅速にロードできることです。特定のオブジェクトを処理することなく、必要な場所で一種のグローバルな「DB_NAME」を参照できます。

欠点は、それらをインポートする必要があるすべてのファイルで import ステートメントを変更する必要があることです。

ファイルを一度インポートしてから、汎用インポートを参照してこれらの値をすべて取得するように設定できますか?

または、これを行うためのはるかに良い方法はありますか?

どんな助けでも大歓迎です。

編集:問題は、複数の設定ファイルがあることに起因します。あるファイルの settings.py をインポートするか、別の設定ファイルが必要な場合は、すべてのインポート ステートメントを変更して test_settings.py などを参照する必要があります。

アプリケーション全体でインポートされるものを変更するために、インポートの場所を手動で変更したくありません。

4

4 に答える 4

4

フォルダに独自のconfig.pyファイルを作成します

settings = {}
settings['server'] = '172.16.150.106:1433'
settings['user'] = 'pyadmin'
settings['password'] = 'admin'
settings['db'] = 'SQLSERV_2005' 

オープンシェル(ipython)

In [1]: from config import settings

In [2]: print settings
{'password': 'admin', 'db': 'SQLSERV_2005', 'user': 'pyadmin', 'server': '172.16.150.106:1433'}

__init __。pyファイルを忘れないでください!

于 2012-11-07T22:18:37.950 に答える
2

モジュールを使用できます__builtin__

ファイル a.py:

#!/usr/bin/env python
import __builtin__
import b

if __name__ == "__main__":
    import conf
    __builtin__.__dict__["CONF"] = conf

    print "IN A: %s" % CONF.VAR

    b.test_conf()

ファイル b.py:

def test_conf():
   print "IN B: %s" % CONF.VAR

ファイル conf.py:

VAR = "ヴァル"

したがって、基本的には、組み込みの dict で要素を一度セットアップしてから、他のロードされたモジュールで名前でアクセスする必要があります。

于 2012-11-07T22:28:30.327 に答える
1

基本的に、グローバルに利用可能なモジュールが必要です。

Pythonモジュールの検索パスのドキュメントに記載されているように、これを行うにはいくつかの方法があります。基本的に、グローバルモジュールを検索パスの下に置くことができればsys.path、ユーザー環境のマシン上のどこからでもアクセスできます。(wsgiサーバーのsys.pathにモジュールを追加することもできることに注意してください。)

.bashrcファイルを介してPYTHONPATH環境変数にいくつかのモジュールを追加します。例えば:

PYTHONPATH=~/projects/pyutil/:$PYTHONPATH

モジュールをインポートする前に、インポートが行われる前にに追加することで、Pythonプログラムの検索パスに追加することもできますsys.path

于 2012-11-07T22:18:24.267 に答える
1

問題は、複数の設定ファイルがあることに起因します

複数のモジュールをエイリアスできるようにしたい場合は、いくつかの解決策があります。

try: 
    import test_settings as settings
except ImportError:
    import default_settings as settings

importモジュールの存在/非存在を使用する必要がないことに注意してください。適切なステートメントを選択するために、任意のフロー制御を使用できます。

また、提案されているPYTHONPATHように、さまざまな設定を目指すために使用できる/使用する必要があります。

   # code just does "import settings" and there's a settings.py in each /opt/{test,default}_settings
   PYTHONPATH=/opt/test_settings ./my_app
   PYTHONPATH=/opt/default_settings ./my_app

そして最後に、distutilsこれを真に再現可能なソリューションにすることを検討してください。異なる設定を、同じパッケージ名を提供する異なるディストリビューションとして配布してください。

于 2012-11-07T22:44:14.253 に答える