Là một nhà phát triển, bạn có thể đã sử dụng các biến môi trường trong dòng lệnh hoặc tập lệnh shell, nhưng bạn đã sử dụng chúng như một cách để định cấu hình các ứng dụng Python của mình chưa?
Hướng dẫn này sẽ chỉ cho bạn tất cả mã cần thiết để nhận, cài đặt và tải các biến môi trường trong Python, bao gồm cách sử dụng chúng để cung cấp cấu hình ứng dụng và bí mật
Không quen thuộc với các biến môi trường?
Tại sao nên sử dụng biến môi trường để định cấu hình ứng dụng Python?
Trước khi tìm hiểu cách sử dụng biến môi trường trong Python, điều quan trọng là phải hiểu tại sao chúng được cho là cách tốt nhất để định cấu hình ứng dụng. Những lợi ích chính là
- Triển khai ứng dụng của bạn trong mọi môi trường mà không cần thay đổi mã
- Đảm bảo các bí mật như khóa API không bị rò rỉ vào mã nguồn
Các biến môi trường có lợi ích bổ sung là trừu tượng hóa từ ứng dụng của bạn cách cấu hình và bí mật được cung cấp
Cuối cùng, các biến môi trường cho phép ứng dụng của bạn chạy ở mọi nơi, cho dù đó là phát triển cục bộ trên macOS, bộ chứa trong Kubernetes Pod hay các nền tảng như Heroku hoặc Vercel
Dưới đây là một số ví dụ về việc sử dụng các biến môi trường để định cấu hình tập lệnh hoặc ứng dụng Python
- Đặt biến môi trường
0 thànhimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
1 để bật chế độ gỡ lỗi cho ứng dụng Flaskimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Cung cấp biến môi trường
2 cho trang web Thương mại điện tửimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Cung cấp biến môi trường
3 cho ứng dụng bot Discord để ứng dụng này có thể tham gia máy chủimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Đặt các biến cơ sở dữ liệu dành riêng cho môi trường, chẳng hạn như
4 vàimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
5 để thông tin đăng nhập cơ sở dữ liệu không bị mã hóa cứngimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
Các biến môi trường trong Python được điền như thế nào?
Khi một quy trình Python được tạo, các biến môi trường có sẵn sẽ điền vào đối tượng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 hoạt động giống như một từ điển Python. Điều này có nghĩa rằng- Mọi sửa đổi biến môi trường được thực hiện sau khi quy trình Python được tạo sẽ không được phản ánh trong quy trình Python
- Mọi thay đổi của biến môi trường được thực hiện trong Python không ảnh hưởng đến các biến môi trường trong quy trình gốc
Bây giờ bạn đã biết cách điền các biến môi trường trong Python, hãy xem cách truy cập chúng
Cách lấy biến môi trường Python
Các biến môi trường trong Python được truy cập bằng đối tượng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6Đối tượng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 có vẻ giống như một từ điển nhưng khác ở chỗ các giá trị chỉ có thể là chuỗi, ngoài ra nó không thể tuần tự hóa thành JSONBạn có một vài lựa chọn khi tham chiếu đến đối tượng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
0Cá nhân tôi thích phiên bản 3 hơn vì nó ngắn gọn hơn, nhưng sẽ sử dụng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 cho bài viết nàyViệc truy cập một biến môi trường cụ thể trong Python có thể được thực hiện theo một trong ba cách, tùy thuộc vào điều gì sẽ xảy ra nếu biến môi trường không tồn tại
Hãy cùng khám phá với một số ví dụ
lựa chọn 1. Bắt buộc không có giá trị mặc định
Nếu ứng dụng của bạn gặp sự cố khi không đặt biến môi trường, thì hãy truy cập trực tiếp vào ứng dụng đó
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
2Ví dụ: một ứng dụng sẽ không khởi động được nếu biến môi trường bắt buộc không được đặt và giá trị mặc định không được cung cấp, e. g. mật khẩu cơ sở dữ liệu
Nếu thay vì ngoại lệ
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
31 mặc định được đưa ra [không cho biết lý do tại sao ứng dụng của bạn không khởi động được], bạn có thể nắm bắt ngoại lệ và in ra một thông báo hữu íchimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
Lựa chọn 2. Bắt buộc với giá trị mặc định
Bạn có thể trả về giá trị mặc định nếu biến môi trường không tồn tại bằng cách sử dụng phương thức
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
32 và cung cấp giá trị mặc định làm tham số thứ haiimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
3Nếu biến không tồn tại và bạn sử dụng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
32 mà không có giá trị mặc định, thì _____134 sẽ được trả vềimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
9Tùy chọn 3. Logic có điều kiện nếu giá trị tồn tại
Bạn có thể cần kiểm tra xem biến môi trường có tồn tại hay không, nhưng không nhất thiết phải quan tâm đến giá trị của nó. Ví dụ: ứng dụng của bạn có thể được đặt ở "Chế độ gỡ lỗi" nếu biến môi trường
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
35 được đặtBạn chỉ có thể kiểm tra sự tồn tại của một biến môi trường
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
1Hoặc kiểm tra xem nó khớp với một giá trị cụ thể
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
2Cách đặt biến môi trường Python
Đặt biến môi trường trong Python cũng giống như đặt khóa trên từ điển
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
3Điều làm cho
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 khác với một từ điển tiêu chuẩn, đó là chỉ cho phép các giá trị chuỗiimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
5Trong hầu hết các trường hợp, ứng dụng của bạn sẽ chỉ cần nhận các biến môi trường, nhưng cũng có những trường hợp sử dụng để thiết lập chúng.
Ví dụ: xây dựng biến môi trường
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
37 khi khởi động ứng dụng bằng cách sử dụng biến môi trường import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
38, import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
39, import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
4, import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
5 và import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
92import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
2Một ví dụ khác là đặt biến thành giá trị mặc định dựa trên giá trị của biến khác
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
20Cách xóa biến môi trường Python
Nếu bạn cần xóa biến môi trường Python, hãy sử dụng hàm
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
93Để mở rộng ví dụ về
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
37 của chúng tôi ở trên, bạn có thể muốn xóa các trường có tiền tố import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
95 khác để đảm bảo cách duy nhất ứng dụng có thể kết nối với cơ sở dữ liệu là thông qua import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
37Một ví dụ khác là xóa một biến môi trường khi nó không còn cần thiết nữa
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
21Cách liệt kê các biến môi trường Python
Để xem tất cả các biến môi trường
Đầu ra của lệnh này rất khó đọc vì nó được in dưới dạng một từ điển khổng lồ
Cách tốt hơn là tạo một hàm tiện lợi để chuyển đổi
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 thành một từ điển thực tế để chúng tôi có thể tuần tự hóa nó thành JSON để in đẹpimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
22Tại sao nên tránh các giá trị mặc định cho các biến môi trường
Bạn có thể ngạc nhiên khi biết rằng tốt nhất là tránh cung cấp các giá trị mặc định càng nhiều càng tốt. Tại sao?
Các giá trị mặc định có thể khiến việc gỡ lỗi một ứng dụng bị định cấu hình sai trở nên khó khăn hơn, vì các giá trị cấu hình cuối cùng có thể sẽ là sự kết hợp của các giá trị mặc định được mã hóa cứng và các biến môi trường
Dựa hoàn toàn vào các biến môi trường [hoặc càng nhiều càng tốt] có nghĩa là bạn có một nguồn thông tin duy nhất về cách ứng dụng của bạn được định cấu hình, giúp khắc phục sự cố dễ dàng hơn
Sử dụng một. tệp env cho các biến môi trường Python
Khi một ứng dụng phát triển về kích thước và độ phức tạp, thì số lượng biến môi trường cũng tăng theo.
Nhiều dự án gặp khó khăn ngày càng tăng khi sử dụng các biến môi trường cho cấu hình ứng dụng và bí mật vì không có chiến lược rõ ràng và nhất quán về cách quản lý chúng, đặc biệt là khi triển khai trên nhiều môi trường
Một giải pháp đơn giản [nhưng không dễ mở rộng] là sử dụng tệp
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
98 để chứa tất cả các biến cho một môi trường cụ thểSau đó, bạn sẽ sử dụng thư viện Python chẳng hạn như python-dotenv để phân tích cú pháp tệp
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
98 và điền vào đối tượng import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6Để làm theo, hãy tạo và kích hoạt một môi trường ảo mới, sau đó cài đặt thư viện python-dotenv
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
23Bây giờ hãy lưu phần bên dưới vào một tệp có tên. env [lưu ý cách đặt biến trong trình bao có cùng cú pháp như thế nào]
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
24Sau đó lưu phần sau vào
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
11import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
25Sau đó chạy
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
11 để kiểm tra các biến môi trường đang được phổ biếnimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
26Mặc dù ban đầu các tệp
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
98 đơn giản và dễ làm việc, nhưng chúng cũng gây ra một loạt vấn đề mới, chẳng hạn như- Làm cách nào để giữ các tệp
98 không đồng bộ cho mọi nhà phát triển trong môi trường cục bộ của họ?import os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Nếu có sự cố ngừng hoạt động do cấu hình sai, hãy truy cập trực tiếp vào bộ chứa hoặc VM để xem nội dung của. env có thể được yêu cầu để khắc phục sự cố
- Làm cách nào để bạn tạo tệp
98 cho tác vụ CI/CD, chẳng hạn như Tác vụ GitHub mà không chuyển tệpimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
98 vào kho lưu trữ?import os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Nếu sử dụng kết hợp các biến môi trường và tệp
98, thì cách duy nhất để xác định giá trị cấu hình cuối cùng có thể là xem xét bên trong ứng dụngimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
- Giới thiệu nhà phát triển bằng cách chia sẻ tệp
98 không được mã hóa với dữ liệu có thể nhạy cảm trong ứng dụng trò chuyện như Slack có thể gây ra sự cố bảo mậtimport os import sys # Ensure all required environment variables are set try: os.environ['API_KEY'] except KeyError: print['[error]: `API_KEY` environment variable required'] sys.exit[1]
Đây chỉ là một số lý do tại sao chúng tôi khuyên bạn nên di chuyển khỏi. env và sử dụng một cái gì đó như Doppler để thay thế
Doppler cung cấp bảng điều khiển được kiểm soát truy cập để quản lý các biến môi trường cho mọi môi trường với CLI dễ sử dụng để truy cập cấu hình và bí mật hoạt động cho mọi ngôn ngữ, khung và nền tảng
Tập trung cấu hình ứng dụng bằng cấu trúc dữ liệu Python
Việc tạo cấu trúc dữ liệu cấu hình cụ thể sẽ trừu tượng hóa cách thiết lập các giá trị cấu hình, trường nào có giá trị mặc định [nếu có] và cung cấp một giao diện duy nhất để truy cập các giá trị cấu hình thay vì
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
6 nằm rải rác khắp cơ sở mã của bạnDưới đây là một giải pháp hợp lý đầy đủ tính năng hỗ trợ
- Phần bắt buộc
- Các trường tùy chọn với giá trị mặc định
- Kiểm tra kiểu và đánh máy
Để dùng thử, hãy lưu mã này vào
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
20import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
27Đối tượng
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
21 được phơi bày trong import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
20 sau đó được sử dụng bởi import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
23 bên dướiimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
28Đảm bảo rằng bạn vẫn lưu tệp
import os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
98 từ trước đó, sau đó chạyimport os
import sys
# Ensure all required environment variables are set
try:
os.environ['API_KEY']
except KeyError:
print['[error]: `API_KEY` environment variable required']
sys.exit[1]
29Bạn có thể xem mã này trên GitHub và nếu bạn đang theo đuổi giải pháp cấu hình an toàn kiểu đầy đủ tính năng hơn, thì hãy xem thư viện Pydantic tuyệt vời
Tóm lược
công việc tuyệt vời. Bây giờ bạn đã biết cách sử dụng các biến môi trường trong Python để cấu hình ứng dụng và bí mật
Mặc dù chúng tôi hơi thiên vị, nhưng chúng tôi khuyến khích bạn thử sử dụng Doppler làm nguồn dữ liệu chính xác cho các biến môi trường ứng dụng của bạn và bạn có thể bắt đầu miễn phí với gói Cộng đồng của chúng tôi [các dự án và bí mật không giới hạn]
Chúng tôi cũng có một hướng dẫn để xây dựng một trình tạo ảnh GIF Mandalorion ngẫu nhiên bằng Python để áp dụng các kỹ thuật được trình bày trong bài viết này vào thực tế
Hy vọng bạn thích bài đăng này và nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, chúng tôi muốn trò chuyện với bạn trong diễn đàn Cộng đồng của chúng tôi
Xin chân thành cảm ơn Stevoisiak, Olivier Pilotte, Jacob Kasner và Alex Hall vì những ý kiến đóng góp và đánh giá của họ
Nếu bạn chưa quen với Python, hãy xem phần mồi biến môi trường Python của Cory Althoff bao gồm các khái niệm cấp độ chi tiết hơn