يقرأ Python-dotenv أزواج القيمة الرئيسية من ملف .env
ويمكنه تعيينها كمتغيرات بيئة. يساعد في تطوير التطبيقات وفقًا لمبادئ الـ 12 عاملًا.
pip install python-dotenv
إذا كان تطبيقك يأخذ تكوينه من متغيرات البيئة، مثل تطبيق مكون من 12 عاملًا، فإن تشغيله في مرحلة التطوير ليس عمليًا جدًا لأنه يتعين عليك تعيين متغيرات البيئة هذه بنفسك.
ولمساعدتك في ذلك، يمكنك إضافة Python-dotenv إلى تطبيقك لجعله يقوم بتحميل التكوين من ملف .env
عندما يكون موجودًا (على سبيل المثال، قيد التطوير) مع بقائه قابلاً للتكوين عبر البيئة:
from dotenv import load_dotenv
load_dotenv () # take environment variables
# Code of your application, which uses environment variables (e.g. from `os.environ` or
# `os.getenv`) as if they came from the actual environment.
افتراضيًا، لا يتجاوز load_dotenv
متغيرات البيئة الموجودة ويبحث عن ملف .env
في نفس الدليل مثل برنامج python النصي أو يبحث عنه بشكل متزايد في الأعلى.
لتكوين بيئة التطوير، قم بإضافة .env
في الدليل الجذر لمشروعك:
.
├── .env
└── foo.py
بناء جملة ملفات .env
التي يدعمها python-dotenv يشبه بناء جملة Bash:
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@ ${DOMAIN}
ROOT_URL= ${DOMAIN} /app
إذا كنت تستخدم متغيرات في القيم، فتأكد من أنها محاطة بـ {
و }
، مثل ${DOMAIN}
، حيث لا يتم توسيع المتغيرات المجردة مثل $DOMAIN
.
ربما ترغب في إضافة .env
إلى .gitignore
الخاص بك، خاصة إذا كان يحتوي على أسرار مثل كلمة المرور.
راجع قسم "تنسيق الملف" أدناه للحصول على مزيد من المعلومات حول ما يمكنك كتابته في ملف .env
.
تعمل الدالة dotenv_values
تقريبًا بنفس الطريقة التي تعمل بها load_dotenv
، باستثناء أنها لا تمس البيئة، بل تقوم فقط بإرجاع dict
بالقيم التي تم تحليلها من ملف .env
.
from dotenv import dotenv_values
config = dotenv_values ( ".env" ) # config = {"USER": "foo", "EMAIL": "[email protected]"}
وهذا يتيح بشكل خاص إدارة التكوين المتقدمة:
import os
from dotenv import dotenv_values
config = {
** dotenv_values ( ".env.shared" ), # load shared development variables
** dotenv_values ( ".env.secret" ), # load sensitive variables
** os . environ , # override loaded values with environment variables
}
تقبل قيم load_dotenv
و dotenv_values
التدفقات عبر وسيطة stream
الخاصة بهم. ومن ثم فمن الممكن تحميل المتغيرات من مصادر أخرى غير نظام الملفات (مثل الشبكة).
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
يمكنك استخدام dotenv في IPython. بشكل افتراضي، سيتم استخدام find_dotenv
للبحث عن ملف .env
:
% load_ext dotenv
% dotenv
يمكنك أيضًا تحديد المسار:
% dotenv relative / or / absolute / path / to / . env
أعلام اختيارية:
-o
لتجاوز المتغيرات الموجودة.-v
لزيادة الإسهاب. يتم أيضًا تضمين dotenv
لواجهة CLI، مما يساعدك على التعامل مع ملف .env
دون فتحه يدويًا.
$ pip install " python-dotenv[cli] "
$ dotenv set USER foo
$ dotenv set EMAIL [email protected]
$ dotenv list
USER=foo
[email protected]
$ dotenv list --format=json
{
" USER " : " foo " ,
" EMAIL " : " [email protected] "
}
$ dotenv run -- python foo.py
قم بتشغيل dotenv --help
لمزيد من المعلومات حول الخيارات والأوامر الفرعية.
لم يتم تحديد التنسيق رسميًا ولا يزال يتحسن بمرور الوقت. ومع ذلك، يجب أن تبدو ملفات .env
في الغالب مثل ملفات Bash.
يمكن أن تكون المفاتيح غير مقتبسة أو ذات علامات اقتباس مفردة. يمكن أن تكون القيم غير مقتبسة، أو ذات علامات اقتباس مفردة أو مزدوجة. يتم تجاهل المسافات قبل وبعد المفاتيح وعلامات المساواة والقيم. يمكن أن يتبع القيم تعليق. يمكن أن تبدأ البنود بتوجيه export
، مما لا يؤثر على تفسيرها.
تسلسلات الهروب المسموح بها:
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
من الممكن أن تمتد القيم ذات علامات الاقتباس المفردة أو المزدوجة على عدة أسطر. الأمثلة التالية متكافئة:
FOO= " first line
second line "
FOO= " first linensecond line "
المتغير لا يمكن أن يكون له قيمة:
FOO
وينتج عن ذلك dotenv_values
بربط اسم المتغير هذا بالقيمة None
(على سبيل المثال {"FOO": None}
. ومن ناحية أخرى، يتجاهل load_dotenv
مثل هذه المتغيرات ببساطة.
لا ينبغي الخلط بين هذا وبين FOO=
، وفي هذه الحالة يرتبط المتغير بالسلسلة الفارغة.
يمكن لـ Python-dotenv استيفاء المتغيرات باستخدام توسيع متغير POSIX.
باستخدام load_dotenv(override=True)
أو dotenv_values()
، تكون قيمة المتغير هي أول القيم المحددة في القائمة التالية:
.env
. مع load_dotenv(override=False)
، قيمة المتغير هي أول القيم المحددة في القائمة التالية:
.env
.تتم صيانة هذا المشروع حاليًا بواسطة سوراب كومار وبرتراند بونيفوي-كلوديت ولم يكن من الممكن تحقيقه بدون دعم هؤلاء الأشخاص الرائعين.