python - tools - ما هي الطريقة الرسمية لتخزين الإعدادات لبرامج الثعبان؟




python tools (8)

أستخدم رفًا ( http://docs.python.org/library/shelve.html ):

shelf = shelve.open(filename)
shelf["users"] = ["David", "Abraham"]
shelf.sync() # Save

يستخدم Django ملفات Python الحقيقية للإعدادات ، يستخدم Trac ملف .ini ، بينما تستخدم بعض البرامج الأخرى ملفات XML للاحتفاظ بهذه المعلومات.

هل أحد هذه الأساليب المباركة من قبل غيدو و / أو مجتمع بيثون أكثر من الآخر؟


إحدى أسهل الطرق المستخدمة هي استخدام وحدة json . احفظ الملف في config.json مع التفاصيل كما هو موضح أدناه.

حفظ البيانات في ملف json:

{

    "john"  : {
        "number" : "948075049" , 
        "password":"thisisit" 
    }    
}

قراءة من ملف json:

import json

#open the config.json file 

with open('config.json') as f:
    mydata = json.load(f) ; 

#Now mydata is a python dictionary 

print("username is " , mydata.get('john').get('number') , " password is " , mydata.get('john').get('password')) ;

بالنسبة لتطبيقات الويب التي أحب استخدام متغيرات بيئة نظام التشغيل: os.environ.get('CONFIG_OPTION')

هذا يعمل بشكل جيد بشكل خاص للإعدادات التي تختلف بين deploys. يمكنك قراءة المزيد حول الأساس المنطقي وراء استخدام env vars هنا: http://www.12factor.net/config

بالطبع ، يعمل هذا فقط مع قيم للقراءة فقط لأن التغييرات في البيئة عادة ما تكون غير ثابتة. ولكن إذا كنت لا تحتاج إلى حق الوصول للكتابة فهي حل جيد للغاية.


خيار واحد فقط ، PyQt. لدى Qt طريقة مستقلة للنظام الأساسي لتخزين الإعدادات باستخدام فئة QSettings. تحت الغطاء ، في نظام التشغيل windows يستخدم السجل وفي نظام التشغيل Linux يخزن الإعدادات في ملف conf مخفي. QSettings يعمل بشكل جيد للغاية ويبدو عديم الجدوى.


لا أعرف ما إذا كان يمكن اعتبار ذلك "رسميًا" ، لكنه موجود في المكتبة القياسية: 14.2. ConfigParser - محلل ملف التكوين .

هذا ، بالطبع ، ليس حلاً عالميًا. ما عليك سوى استخدام كل ما هو أكثر ملاءمة للمهمة ، دون أي تعقيد ضروري (وخاصة - أكتمال تورينج! فكر في التكوينات التلقائية أو واجهة المستخدم الرسومية).


لا يوجد حل مبارك حسب علمي. لا توجد طريقة صحيحة أو خاطئة لتخزين إعدادات التطبيق ، ولا تكون ملفات xml أو json أو جميع أنواع الملفات جيدة طالما كنت مرتاحًا. بالنسبة لبيثون أنا شخصياً أستخدم pypref فهو سهل للغاية ، ومنصة متقاطعة ومباشرة.

pypref مفيد جدًا حيث يمكن للمرء تخزين الإعدادات والتفضيلات الثابتة والديناميكية ...

    from pypref import Preferences

    #  create singleton preferences instance
    pref = Preferences(filename="preferences_test.py")

    # create preferences dict
    pdict = {'preference 1': 1, 12345: 'I am a number'}

    # set preferences. This would automatically create preferences_test.py 
    # in your home directory. Go and check it.
    pref.set_preferences(pdict)

    # lets update the preferences. This would automatically update 
    # preferences_test.py file, you can verify that. 
    pref.update_preferences({'preference 1': 2})

    # lets get some preferences. This would return the value of the preference if
    # it is defined or default value if it is not.
    print pref.get('preference 1')

    # In some cases we must use raw strings. This is most likely needed when
    # working with paths in a windows systems or when a preference includes
    # especial characters. That's how to do it ...
    pref.update_preferences({'my path': " r'C:\Users\Me\Desktop' "})

    # Sometimes preferences to change dynamically or to be evaluated real time.
    # This also can be done by using dynamic property. In this example password
    # generator preference is set using uuid module. dynamic dictionary
    # must include all modules name that must be imported upon evaluating
    # a dynamic preference
    pre = {'password generator': "str(uuid.uuid1())"}
    dyn = {'password generator': ['uuid',]}
    pref.update_preferences(preferences=pre, dynamic=dyn)

    # lets pull 'password generator' preferences twice and notice how
    # passwords are different at every pull
    print pref.get('password generator')
    print pref.get('password generator')

    # those preferences can be accessed later. Let's simulate that by creating
    # another preferences instances which will automatically detect the 
    # existance of a preferences file and connect to it
    newPref = Preferences(filename="preferences_test.py")

    # let's print 'my path' preference
    print newPref.get('my path')

لماذا يبارك غيدو شيئًا خارج عن نطاقه؟ لا يوجد شيء خاص المباركة.


هذا يعتمد إلى حد كبير على مدى تعقيد التكوين الخاص بك. إذا كنت تقوم بإجراء تعيين بسيط للقيمة الرئيسية وتريد إمكانية تحرير الإعدادات باستخدام محرر نصوص ، فأعتقد أن ConfigParser هو السبيل للذهاب.

إذا كانت إعداداتك معقدة وتتضمن قوائم وهياكل البيانات المتداخلة ، فسأستخدم XML أو JSON وأنشئ محرر تهيئة.

بالنسبة للأشياء المعقدة حقًا حيث لا يُتوقع من المستخدم النهائي تغيير الإعدادات كثيرًا ، أو أنه أكثر ثقة ، ما عليك سوى إنشاء مجموعة من فئات Python وتقييم برنامج Python النصي للحصول على التكوين.







settings