متغيرات البيئة لمشاريع بيثون
عند تطوير تطبيق ويب أو برنامج روبوت ، غالبًا ما نتعامل مع أي معلومات سرية والعديد من الرموز وكلمات المرور (مفاتيح API ، أسرار نماذج الويب). يعد تشفير هذه المعلومات ، ناهيك عن تخزينها في نظام تحكم في إصدار متاح للجمهور ، فكرة سيئة للغاية.
ملفات التكوين
تتمثل أسهل طريقة لحل هذه المشكلة في إنشاء ملف تكوين منفصل يحتوي على جميع المعلومات الحساسة وإضافته إلى .gitignore
. عيوب هذا النهج هو أنه في git تحتاج أيضًا إلى الحفاظ على قالب ملف التكوين ولا تنسَ تحديثه بشكل دوري.
متغيرات البيئة
نهج أكثر تقدما هو استخدام متغيرات البيئة. متغيرات البيئة تسمى متغيرات تحتوي على معلومات نصية يمكن تشغيل البرامج. على سبيل المثال ، لبدء تطبيق قارورة ، تحتاج أولاً إلى تحديد اسم تطبيقنا في متغير البيئة 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
يسمح لك هذا بتنشيط البيئة الافتراضية تلقائيًا وتحميل متغيرات البيئة عند الدخول إلى مجلد المشروع.
