最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用dotenv讀取環(huán)境變量的示例詳解

 更新時間:2026年02月27日 09:27:39   作者:SunnyRivers  
python-dotenv 是一個輕量級 Python 包,它的作用是自動從項目中的 .env 文件讀取環(huán)境變量,并將其加載到當(dāng)前 Python 進程的環(huán)境變量中,下面我們就來看看如何使用python-dotenv 靈活地管理 Python 項目的配置吧

在開發(fā) Python 應(yīng)用時,你是否曾遇到過這些問題?

  • 數(shù)據(jù)庫密碼、API 密鑰等敏感信息直接寫在代碼里,不小心提交到 GitHub 被公開?
  • 開發(fā)、測試、生產(chǎn)環(huán)境需要不同的配置,每次部署都要手動修改代碼?
  • 團隊協(xié)作時,每個人的本地配置不同,導(dǎo)致“在我機器上能跑”?

這些問題的根源,往往在于配置與代碼沒有分離。而解決之道,就是使用 環(huán)境變量(Environment Variables) + python-dotenv 工具。

本文將帶你從零開始,系統(tǒng)掌握如何用 python-dotenv 安全、靈活地管理 Python 項目的配置,并重點講解多環(huán)境(開發(fā)/測試/生產(chǎn))下的最佳實踐。

為什么需要環(huán)境變量

環(huán)境變量是操作系統(tǒng)提供的一種鍵值對存儲機制,常用于:

  • 存放數(shù)據(jù)庫連接地址、密鑰、第三方服務(wù) Token 等敏感信息
  • 控制應(yīng)用行為(如是否開啟調(diào)試模式)
  • 實現(xiàn)同一份代碼在不同環(huán)境下運行不同配置

核心原則:配置不屬于代碼,應(yīng)與代碼分離。

  • 正確做法:代碼中通過 os.getenv(“DB_URL”) 獲取配置
  • 錯誤做法:代碼中硬編碼 DB_URL = “postgres://user:pass@localhost/db”

但問題來了:每次運行程序前,都要手動 export DB_URL=… 嗎?太麻煩!

這時,.env 文件 + python-dotenv 就派上用場了。

什么是 python-dotenv?

python-dotenv 是一個輕量級 Python 包,它的作用是:

自動從項目中的 .env 文件讀取環(huán)境變量,并將其加載到當(dāng)前 Python 進程的環(huán)境變量中。

這樣,你只需維護一個 .env 文件,無需手動設(shè)置系統(tǒng)環(huán)境變量,也無需把敏感信息寫進代碼。

安裝

pip install python-dotenv

基礎(chǔ)用法:創(chuàng)建并加載 .env 文件

1. 項目結(jié)構(gòu)

建議將 .env 放在項目根目錄:

my_app/
├── .env              # ← 環(huán)境變量文件(不要提交到 Git?。?br />├── app.py            # 主程序
└── .gitignore        # 必須忽略 .env

2. 編寫 .env 文件

.env 是純文本文件,格式為 KEY=VALUE,每行一個變量:

# .env
DATABASE_URL=postgresql://user:password@localhost/mydb
SECRET_KEY=my_super_secret_key_123!
DEBUG=True
API_TIMEOUT=30

高級語法支持

多行值(用雙引號包裹):

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA...
-----END RSA PRIVATE KEY-----"

變量引用(使用 ${VAR}):

PROJECT_DIR=/home/user/my_app
LOG_PATH=${PROJECT_DIR}/logs

注意:.env 中的值始終是字符串,布爾值或數(shù)字需在代碼中轉(zhuǎn)換。

3. 在 Python 中加載并讀取

# app.py
from dotenv import load_dotenv
import os

# 自動加載 ./.env 文件
load_dotenv()

# 讀取變量
db_url = os.getenv("DATABASE_URL")
secret = os.getenv("SECRET_KEY")
debug = os.getenv("DEBUG", "False").lower() == "true"  # 轉(zhuǎn)為布爾值
timeout = int(os.getenv("API_TIMEOUT", "10"))          # 轉(zhuǎn)為整數(shù)

print(f"Debug mode: {debug}")
print(f"DB URL: {db_url}")

最佳實踐:始終為 os.getenv() 提供默認值,避免因變量缺失導(dǎo)致崩潰。

安全第一:保護你的 .env 文件

.env 通常包含高度敏感信息,必須做到:

1. 永遠不要提交到版本控制!

在 .gitignore 中加入:

# .gitignore
.env
.env.local
.env.*  # 忽略所有 .env 開頭的文件(除非明確需要共享)

2. 團隊協(xié)作怎么辦?

提供一個模板文件,如 .env.example,包含占位符但無真實值:

# .env.example
DATABASE_URL=your_database_url_here
SECRET_KEY=generate_a_strong_random_key
DEBUG=True

新成員復(fù)制該文件為 .env 并填入自己的配置。

重點!多環(huán)境配置管理(開發(fā) / 測試 / 生產(chǎn))

真實項目通常有多個運行環(huán)境,每個環(huán)境需要不同的配置。硬編碼或頻繁修改 .env 顯然不可持續(xù)。

解決方案:使用多個 .env 文件

環(huán)境文件名用途說明
共享配置.env.shared所有環(huán)境通用的非敏感配置
開發(fā)環(huán)境.env.development本地開發(fā)使用(如啟用 DEBUG)
測試環(huán)境.env.testingCI/CD 或自動化測試專用
生產(chǎn)環(huán)境.env.production線上服務(wù)器使用(高安全要求)

如何加載指定環(huán)境的配置

你可以根據(jù)當(dāng)前環(huán)境動態(tài)加載對應(yīng)的 .env 文件:

# config.py
import os
from dotenv import load_dotenv, dotenv_values

# 1. 先加載共享配置
load_dotenv(".env.shared")

# 2. 再根據(jù) ENV 環(huán)境變量加載特定配置
env = os.getenv("ENV", "development")  # 默認為開發(fā)環(huán)境

if env == "production":
    load_dotenv(".env.production", override=True)
elif env == "testing":
    load_dotenv(".env.testing", override=True)
else:
    load_dotenv(".env.development", override=True)

# 現(xiàn)在 os.getenv() 可獲取最終合并后的變量

關(guān)鍵參數(shù):override=True 表示新加載的變量會覆蓋已存在的同名變量。

啟動應(yīng)用時指定環(huán)境

# 開發(fā)
ENV=development python app.py

# 生產(chǎn)
ENV=production gunicorn app:app

更高級方案:使用 dotenv_values 返回字典(不污染全局環(huán)境)

如果你不想修改全局 os.environ(例如在單元測試中),可以用 dotenv_values:

from dotenv import dotenv_values

# 合并多個配置文件
shared = dotenv_values(".env.shared")
dev = dotenv_values(".env.development")
config = {**shared, **dev}  # 后者覆蓋前者

print(config["DATABASE_URL"])

這種方式更可控,適合復(fù)雜場景。

常見問題與最佳實踐

Q1: .env 和系統(tǒng)環(huán)境變量沖突怎么辦?

A: load_dotenv(override=False)(默認)不會覆蓋已存在的系統(tǒng)變量;設(shè)為 True 則會覆蓋。建議優(yōu)先使用系統(tǒng)變量,.env 僅作開發(fā)時的默認值。

Q2: 如何驗證變量是否加載成功?

A: 打印 os.environ 的子集,或使用日志記錄關(guān)鍵配置(注意:不要打印敏感值?。?。

總結(jié)

能力說明
安全隔離敏感信息不出現(xiàn)在代碼中
靈活配置一套代碼,多套配置
團隊友好通過 .env.example 統(tǒng)一規(guī)范
多環(huán)境支持開發(fā)/測試/生產(chǎn)無縫切換
簡單易用3 行代碼即可集成

python-dotenv 雖小,卻是現(xiàn)代 Python 開發(fā)不可或缺的工具。它讓你的項目更安全、可維護、可部署。

到此這篇關(guān)于Python使用dotenv讀取環(huán)境變量的示例詳解的文章就介紹到這了,更多相關(guān)Python dotenv讀取環(huán)境變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Django+uwsgi+Nginx上線最佳實戰(zhàn)

    詳解Django+uwsgi+Nginx上線最佳實戰(zhàn)

    這篇文章主要介紹了Django+uwsgi+Nginx上線最佳實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python獲取當(dāng)前計算機cpu數(shù)量的方法

    python獲取當(dāng)前計算機cpu數(shù)量的方法

    這篇文章主要介紹了python獲取當(dāng)前計算機cpu數(shù)量的方法,涉及Python操作計算機硬件的技巧,代碼簡單易懂,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 用Pycharm實現(xiàn)鼠標滾輪控制字體大小的方法

    用Pycharm實現(xiàn)鼠標滾輪控制字體大小的方法

    今天小編就為大家分享一篇用Pycharm實現(xiàn)鼠標滾輪控制字體大小的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 68行Python代碼實現(xiàn)帶難度升級的貪吃蛇

    68行Python代碼實現(xiàn)帶難度升級的貪吃蛇

    本文主要介紹了Python代碼實現(xiàn)帶難度升級的貪吃蛇,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 十條建議幫你提高Python編程效率

    十條建議幫你提高Python編程效率

    這篇文章主要為大家介紹了十條建議,可以幫你提高Python編程效率的10條,想要提升提高Python編程效率的朋友不要錯過
    2016-02-02
  • Python數(shù)字處理的核心技巧分享

    Python數(shù)字處理的核心技巧分享

    數(shù)字處理是編程中最基礎(chǔ)也最核心的能力之一,Python作為一門“電池包含”的語言,提供了豐富的數(shù)字處理工具,從基本運算到復(fù)雜數(shù)學(xué)模型都能輕松應(yīng)對,本文將通過實際案例,帶你系統(tǒng)掌握Python數(shù)字處理的核心技巧,需要的朋友可以參考下
    2025-07-07
  • Python中的?Numpy?數(shù)組形狀改變及索引切片

    Python中的?Numpy?數(shù)組形狀改變及索引切片

    這篇文章主要介紹了Python中的?Numpy?數(shù)組形狀改變及索引切片,Numpy提供了一個reshape()方法,它可以改變數(shù)組的形狀,返回一個新的數(shù)組,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章
    2022-05-05
  • Python中的TCP socket寫法示例

    Python中的TCP socket寫法示例

    最近在學(xué)習(xí)腳本語言python,所以下面這篇文章主要給大家介紹了關(guān)于Python中TCP socket寫法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們一起來看看吧
    2018-05-05
  • python中的轉(zhuǎn)義字符串問題

    python中的轉(zhuǎn)義字符串問題

    這篇文章主要介紹了python中的轉(zhuǎn)義字符串問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Python實現(xiàn)將MySQL中所有表的數(shù)據(jù)都導(dǎo)出為CSV文件并壓縮

    Python實現(xiàn)將MySQL中所有表的數(shù)據(jù)都導(dǎo)出為CSV文件并壓縮

    這篇文章主要為大家詳細介紹了如何使用Python將MySQL數(shù)據(jù)庫中所有表的數(shù)據(jù)都導(dǎo)出為CSV文件到一個目錄,并壓縮為zip文件到另一個目錄下,需要的可以了解下
    2025-03-03

最新評論

罗城| 南皮县| 黄大仙区| 新余市| 灵石县| 沁水县| 津市市| 石泉县| 柳江县| 涞水县| 眉山市| 高唐县| 西吉县| 苏州市| 全椒县| 陇西县| 宁乡县| 泊头市| 福州市| 改则县| 乌苏市| 武强县| 塔河县| 大冶市| 上饶市| 洞口县| 平阴县| 林芝县| 宁陕县| 开封县| 建湖县| 晋江市| 抚州市| 宁城县| 会昌县| 北票市| 泾川县| 砚山县| 柳河县| 九龙城区| 桓台县|