متغيرات البيئة لمشاريع بيثون

متغيرات البيئة لمشاريع بيثون


عند تطوير تطبيق ويب أو برنامج روبوت ، غالبًا ما نتعامل مع أي معلومات سرية والعديد من الرموز وكلمات المرور (مفاتيح API ، أسرار نماذج الويب). يعد تشفير هذه المعلومات ، ناهيك عن تخزينها في نظام تحكم في إصدار متاح للجمهور ، فكرة سيئة للغاية.


#  .   . API_KEY = 'very_secret_password' 

ملفات التكوين


تتمثل أسهل طريقة لحل هذه المشكلة في إنشاء ملف تكوين منفصل يحتوي على جميع المعلومات الحساسة وإضافته إلى .gitignore . عيوب هذا النهج هو أنه في git تحتاج أيضًا إلى الحفاظ على قالب ملف التكوين ولا تنسَ تحديثه بشكل دوري.


 #  . from config import API_KEY app = Flask(__name__) app.config['API_KEY'] = API_KEY 

متغيرات البيئة


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


 $ export FLASK_APP=hello.py $ flask run * Running on http://127.0.0.1:5000/ 

باستخدام متغيرات البيئة ، يمكنك الحصول على العديد من معلمات التطبيق والمفاتيح السرية:


 import os app.config['API_KEY'] = os.environ.get('API_KEY') 

مكتبة بيثون-دوتنف


من أجل عدم ضبط متغيرات البيئة يدويًا في كل مرة يتم فيها إعادة تشغيل الجهاز ، يمكنك استخدام حزمة python-dotenv . يسمح لك بتحميل متغيرات البيئة من ملف .env في الدليل الجذر للتطبيق.
تثبيت الحزمة:


 pip install python-dotenv 

يمكنك الآن إنشاء ملف .env مع جميع متغيرات البيئة التي يحتاجها التطبيق. هام ، أضف ملف .env إلى .env ، لا تقم بتخزينه في نظام التحكم في الإصدار.


 import os from dotenv import load_dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path) 

يمكن استخدام ملف .env هذا لجميع متغيرات التكوين ، لكن لا يمكن استخدامه FLASK_DEBUG البيئة FLASK_DEBUG و FLASK_DEBUG ، نظرًا لأنها مطلوبة بالفعل أثناء التحميل الأولي للتطبيق.


فائدة Direnv


يمكن تحميل متغيرات البيئة تلقائيًا عند إدخال مجلد المشروع ، وهذا مناسب بشكل خاص عند العمل مع العديد من المشاريع في نفس الوقت. الأداة المساعدة direnv تسمح لك بذلك. Direnv هو مدير متغير للبيئة الطرفية يدعم bash و zsh و tcsh وغيرها من الأصداف. يتيح لك تحميل متغيرات البيئة وإلغاء تحميلها تلقائيًا وفقًا للدليل الحالي. يتيح لك ذلك وجود متغيرات بيئة خاصة بكل مشروع. قبل كل دعوة ، يتم التحقق من وجود ملف .envrc في الدلائل الحالية والدلائل الرئيسية. في حالة وجود الملف ، يتم تحميله في subashtern bash ، ثم يتم التقاط جميع المتغيرات التي تم تصديرها بواسطة direnv ثم يتم توفيرها للقذيفة.


تثبيت direnv


 sudo apt-get install direnv 

بعد ذلك ، ستحتاج إلى إجراء تغييرات لتهيئة shell ؛ وبالنسبة للباش ، أضف ما يلي إلى نهاية ~/.bashrc وأعد تشغيل وحدة التحكم:


 eval "$(direnv hook bash)" 

مثال Direnv

قم بإنشاء مجلد جديد للمشروع:


 $ mkdir ~/my-project $ cd ~/my-project 

نوضح أنه لم يتم تحميل متغير البيئة FLASK_APP:


 $ echo $FLASK_APP nope 

اكتب متغيرات البيئة إلى ملف .envrc :


 $ echo export FLASK_APP=hello.py > .envrc .envrc is not allowed 

لضمان الأمن ، بعد إنشاء ملف .envrc أو تعديله ، تحتاج إلى التأكيد باستخدام الأمر direnv allow:


 $ direnv allow . direnv: reloading direnv: loading .envrc direnv export: +FLASK_APP 

نظهر أنه تم تحميل متغير البيئة:


 $ echo $FLASK_APP hello.py 

عند الخروج من مجلد المشروع ، يتم إلغاء تحميل متغيرات البيئة


 $ cd .. direnv: unloading 

وتصبح منزعج مرة أخرى


 $ echo $FLASK_APP nope 

العمل مع البيئات الافتراضية في direnv


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


لاستخدام venv لإنشاء بيئة افتراضية وتنشيطها تلقائيًا ، تحتاج إلى إضافة التعليمات البرمجية التالية إلى ملف ~/.config/direnv/direnvrc (انظر الوثائق) .


خلق بيئة افتراضية

إذا قمت بإضافة خط إلى ملف .envrc


 layout python-venv 

ثم عندما تذهب إلى المجلد ، سيخلق direnv بيئة افتراضية في مجلد direnv ، على سبيل المثال .direnv/python-venv-3.7.3 .
لإنشاء بيئة افتراضية ذات مسار مختلف ، على سبيل المثال ، في مجلد venv الأكثر دراية ، تحتاج إلى تعيين متغير VIRTUAL_ENV :


 export VIRTUAL_ENV=.venv 

بنفس الطريقة ، يمكنك توصيل بيئة افتراضية تم إنشاؤها بالفعل.


العمل مع إصدارات مختلفة من بيثون

لتثبيت الإصدار بخلاف إصدار نظام python ، تحتاج إلى استخدام الأمر:


 layout python-venv python3.6 

إنشاء سلسلة موجه bash (PS1)

على عكس التنشيط اليدوي للبيئة الافتراضية ، في حالتنا ، لن يتم تغيير موجه bash (PS1) (عادة ما يشبه (venv) user@comp:~$ ). لإرجاع عرض تنشيط البيئة الافتراضية إلى وحدة التحكم ، أضف التعليمات البرمجية التالية إلى ~/.bashrc :


 show_virtual_env() { if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then echo "($(basename $VIRTUAL_ENV))" fi } export -f show_virtual_env PS1='$(show_virtual_env)'$PS1 

نموذج ملف تكوين ملف .envrc

هذا ما قد .envrc ملف .envrc تكوينه لتطوير تطبيق قارورة:


 export VIRTUAL_ENV=venv layout python-venv export FLASK_APP=app.py export FLASK_DEBUG=1 

يسمح لك هذا بتنشيط البيئة الافتراضية تلقائيًا وتحميل متغيرات البيئة عند الدخول إلى مجلد المشروع.


terminal_direnv

Source: https://habr.com/ru/post/ar472674/


All Articles