برنامه های مختلفی مانند برنامه های تحت وب، برنامه های گرافیکی، برنامه های خط فرمان، تحلیل و پردازش داده ها، کار با پایگاه داده های رابطه ای و غیر رابطه ای NoSQL و غیره را می توان با زبان پایتون بنویسیم. چیزی که در تمامی این برنامه ها وجود دارد، یک سری از تنظیم هایی هستند که باید در یک سری از گزینه ها پیکر بندی شوند. پایتون برای کار با این مورد و خواندن تنظیم های پیکربندی، ماژول استاندارد و درونی (built-in) به نام ConfigParser را فراهم کرده است. در این مطلب می خواهیم روش های مختلفی که برای ذخیره سازی تنظیم ها استفاده می شوند را معرفی کنیم.

روش های ذخیره تنظیم ها

روش های مختلفی برای ذخیره سازی تنظیم های برنامه وجود دارد. درون یک فایل از برنامه که لازم است تنظیم ها خوانده و اعمال شوند، ماژول config باید بتواند از یک منبع این تنظیم ها را بخواند و به درون آن فایل اعمال کند. روش های زیر، روش های معمولی هستند که می توانیم تنظیم های پیکربندی برنامه را در آن ذخیره کنیم.

۱ – استفاده از ساختار داده ها مانند دیکشنری و یک فایل مجزا به فرمت های json یا xml

۲ – استفاده از کلاس برای پیاده سازی تنظیم ها در غالب خصوصیت ها (attributes)

۳ – استفاده از متغیر های محیطی سیستم عامل

۱ –  استفاده از ساختار داده ها مانند دیکشنری و یک فایل json یا xml

فرض می کنیم فایلی به نام config.py داریم که تنظیم های پیکربندی در غالب یک دیکشنری در آن ذخیره شده اند. به طور مثال اطلاعات اتصال به پایگاه داده در آن ذخیره شده اند و حال می خواهیم در فایل دیگری به نام connection.py از این اطلاعات برای برقراری اتصال به پایگاه داده استفاده کنیم، پس در ابتدا باید فایل config.py را ایجاد کنید و همانند قطعه کد زیر و در غالب یک دیکشنری، اطلاعات لازم برای اتصال به پایگاه داده mysql را آماده کنید. کدهای زیر به ترتیب محتوای فایل های config.py و connection.py را نشان می دهند.

در قطعه کد فایل connection.py و درون متد ()connect از ماژول pymysql از المان های دیکشنری DATABASE_SETTINGS استفاده کرده ایم. برای اتصال به پایگاه داده mysql حداقل نیاز به نام هاست، نام و گذرواژه کاربر و نام پایگاه داده داریم. توجه کنید که دیکشنری DATABASE_SETTINGS را در فایل config.py ذخیره کرده ایم. حال اگر بخواهیم تنظیم هایی دیگری را اضافه کنیم، تنها باید جفت کلید و مقدار را به دیشکنری DATABASE_SETTINGS اضافه کنیم و یا اینکه در فایل config.py یک دیکشنری جدید، برای اطلاعات جدید ایجاد کنیم. همچنین هر زمان که بخواهیم تنظیمی را تغییر دهیم، تنها و تنها درون فایل config.py این کار را انجام می دهیم.

بنابراین ساختار دیکشنری که باید تنظیم ها را در خود نگه دارد را می توانیم در یک فایل مجزا ذخیره کنیم و سپس این فایل را به درون دیگر فایل های برنامه ضمیمه (یا import) کنیم و نهایتا به المان های درون آن دسترسی داشته باشیم. همچنین شما می توانید تنظیم ها را درون یک فایل json یا حتی فایل xml ذخیره کنید و سپس از طریق ماژول هایی که برای پردازش فایل json و فایل xml استفاده می شوند، فایل مربوطه را بخوانید و به تنطیم های موجود در آنها دسترسی داشته باشید. توجه کنید که اساسا فرمت های json و xml برای تبادل اطلاعات میان دو سیستم مجزا و مستقل از هم استفاده می شوند. به طور مثال سیستم های ابری (cloud computing) ممکن است تنظیمات مربوط به سیستم های خود مانند فضای ذخیره سازی و یا هر سرویس دیگر را در غالب یک فایل json در اختیار برنامه نویس ها قرار دهند.

۲ – استفاده از کلاس برای پیاده سازی تنظیم ها در غالب خصوصیت ها

در کد زیر درون فایل config.py ابتدا یک کلاس به نام Config تعریف شده است که به عنوان کلاس پایه (base class) برای دیگر کلاس ها است. کلاس Config کلاسی است که تمامی تنظیم های عمومی را در خود دارد و حال می توانیم بر اساس محیط توسعه، آزمایش یا عملیاتی بودن، کلاس های مجزایی تعریف شده اند که همگی از کلاس پایه Config مشتق شده اند. به طور کلی در زمان پیاده سازی برنامه، می توانیم سه محیط توسعه (development)، محیط آزمایش (test) و محیط عملیاتی (production) وجود دارند که هر یک تنظیم های مجزایی نسبت به دیگری دارند. به طور مثال در محیط عملیاتی دیگر نیازی به نمایش خطا ها و پیغام های debug نیست ولی در محیط های توسعه و آزمایش نیاز به نمایش خطاها و پیغام های debug است.

۳ – استفاده از متغیر های محیطی سیستم عامل

در هر دو سیستم عامل های ویندوز و یونیکس (مانند لینوکس و مکینتاش) می توانیم متغیرهای محیطی را تعریف کنیم. در ویندوز می توانیم از دستور set و در سیستم عامل های یونیکسی از دستور export برای تعریف متغیر های محیطی موقتی استفاده کنیم. پس از اینکه خط فرمان را ببندیم یا سیستم عامل shutdown یا restart شود، این متغیرها از بین می روند. دستور های زیر دو فرمت کلی برای ایجاد متغیر محیطی به ترتیب در ویندوز و یونیکس را نشان می دهد.