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
เพื่อเพิ่มรายละเอียด นอกจากนี้ยังมีอินเทอร์เฟซ CLI dotenv
ซึ่งช่วยให้คุณจัดการไฟล์ .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
ปัจจุบันโครงการนี้ได้รับการดูแลโดย Saurabh Kumar และ Bertrand Bonnefoy-Claudet และคงเป็นไปไม่ได้หากไม่ได้รับการสนับสนุนจากคนที่ยอดเยี่ยมเหล่านี้