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

برنامه های مختلفی مانند برنامه های تحت وب، برنامه های گرافیکی، برنامه های خط فرمان، تحلیل و پردازش داده ها، کار با پایگاه داده های رابطه ای و غیر رابطه ای 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 در اختیار برنامه نویس ها قرار دهند.

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

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

محتوای فایل config.p

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

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

حال برای نمایش مقدار متغیر باید از دستور echo در هر دو سیستم عامل استفاده کنیم. توجه کنید که نام متغیرهای محیطی در ویندوز میان دو علامت % و به صورت %variable_name% قرار می گیرند ولی در یونیکس ها نام متغیر با علامت $ شروع می شود. در لینوکس از فایل bashrc یا bash_profile استفاده می شود. البته ممکن است که پوسته یا shell شما متفاوت باشد، پس نام فایل نیز متفات خواهد بود. به هر حال می توانید با جستجو در اینترنت چگونگی ایجاد متغیر محیطی را برای سیستم عامل دلخواه خود پیدا کنید.

فرض کنید یک API KEY مربوط به دریافت وضعیت آب و هوا را داریم و می خواهیم آنرا درون متغیر محیطی به نام API_KEY ذخیره کنیم، پس فرض می کنیم در حال حاظر شما این متغیر محیطی را ایجاد کرده اید، پس باید توسط ()os.environ.get مقدار متغیر محیطی را بخوانیم و آنرا درون یک متغیر پایتون ذخیره کنیم. برای مثال در این مطلب و در سیستم عامل مکینتاش یا هر سیستم عامل لینوکسی دیگر، متغیر محیطی HOME را می خوانیم تا بفهمیم که دایرکتوری خانگی کاربر فعلی چیست و سپس یک زیر دایرکتوری در آن ایجاد خواهیم کرد.

در کد بالا با استفاده از متدهای ()confirm و ()prompt از ماژول click یک دستور ایجاد کرده ایم. ابتدا توسط متد ()confirm پرسیده می شود که آیا دایرکتوری new_dir در زیر دایرکتوری خانگی کاربر فعلی ایجاد شود. اگر y را وارد کنید به معنی تایید این پرسش است و دایرکتوری جدید در زیر داریرکتوری خانگی ایجاد می شود. در غیر اینصورت شما n را وارد کرده اید که به معنی عدم ایجاد دایرکتوری new_dir در زیر دایرکتوری خانگی است و خودتان باید از طریق متد ()prompt مسیری را برای ایجاد شدن دایرکتوری new_dir اعلام کنید. توجه کنید که پیش از هر چیز، مسیر دایرکتوری خانگی از درون متغیر محیطی HOME در سیستم عامل لینوکس (و یا مکینتاش و حتی ویندوز) خوانده و در منغیر home_dir ذخیره شده است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *