欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析如何使用python dotenv模塊管理環(huán)境變量

 更新時間:2025年05月16日 10:07:51   作者:田辛 | 田豆芽  
在開發(fā)Python應(yīng)用程序時,管理配置信息是一個常見的需求,本文主要來和大家講講通過python-dotenv模塊幫助我們輕松地從文件中讀取環(huán)境變量并在程序中使用,感興趣的可以了解下

在開發(fā)和部署 Python 應(yīng)用程序時(要么是在某個Python環(huán)境,要么是在MaxKB等知識庫系統(tǒng)),我常常需要根據(jù)不同的環(huán)境(如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境)使用不同的配置信息,或者不想將敏感信息(如數(shù)據(jù)庫連接字符串、API 密鑰等)直接寫在代碼中。這時候,使用環(huán)境變量來管理這些配置信息就顯得非常方便和安全。今天, 田辛老師介紹通過python-dotenv模塊,幫助我們輕松地從文件中讀取環(huán)境變量并在程序中使用。

1. 安裝 python-dotenv 模塊

python-dotenv 模塊不是 Python 標(biāo)準(zhǔn)庫的一部分,所以我們需要先安裝它??梢允褂?pip來進(jìn)行安裝:

pip install python-dotenv

或者在Windows系統(tǒng)中

py -m pip install python-dotenv

2. .env文件的使用

我們通常會在項目根目錄下創(chuàng)建一個名為.env的文件,在這個文件中以鍵=值的形式定義環(huán)境變量。例如:

NAME=田辛
COMPANY=田豆芽
EMAIL=tianxin.xp@gmail.com
API_KEY=sf-XXXXXXXXXX

這個文件中的每一行代表一個環(huán)境變量及其對應(yīng)的值。

2.1. 使用 load_dotenv() 函數(shù)加載環(huán)境變量

要將 .env 文件中的環(huán)境變量加載到程序中,可以使用 load_dotenv() 函數(shù)。這個函數(shù)會自動在當(dāng)前目錄及其父目錄中查找 .env 文件,并將其中定義的環(huán)境變量加載到操作系統(tǒng)的環(huán)境變量中。

from dotenv import load_dotenv

load_dotenv()

如果 .env 文件成功加載,load_dotenv() 函數(shù)會返回 True,否則返回 False。我們可以利用這個返回值來判斷是否成功加載了環(huán)境變量:

    # 加載環(huán)境變量文件
    if load_dotenv():
        print(f"{log_time} [INF] 讀取配置文件成功")
    else:
        print(f"{log_time} [ERR] 讀取配置文件失敗,請檢查配置文件是否存在或路徑是否正確")
        raise FileNotFoundError("配置文件不存在或路徑不正確")

2.2. 訪問環(huán)境變量

加載環(huán)境變量后,我們就可以通過 os 模塊來訪問這些變量了。例如:

import os
from dotenv import load_dotenv

load_dotenv()
print(os.getenv('NAME'))  # 輸出:田辛
company = os.environ['COMPANY']
print(company )  # 輸出:田豆芽
api_key = os.environ.get('SILICONFLOW_KEY', 'Nothing')  # 如果 SILICONFLOW_KEY 未定義,則返回默認(rèn)值 'default'
print(api_key )  # 輸出:Nothing

實(shí)際輸出結(jié)果

PS E:\BG10-TRN-AIT-AI編程> & D:/01-Development/Conda/envs/py3.12/python.exe e:/BG10-TRN-AIT-AI編程/src/basic/package-dotenv.py
成功從 .env 文件加載環(huán)境變量
田辛
田豆芽
Nothing
PS E:\BG10-TRN-AIT-AI編程> 

說明os.getenv() 和 os.environ.get() 都可以用來獲取環(huán)境變量的值,它們都可以指定一個默認(rèn)值,當(dāng)環(huán)境變量未定義時返回該默認(rèn)值。

3. 檢查環(huán)境變量在操作系統(tǒng)中的設(shè)置

我們可以通過操作系統(tǒng)的命令行來檢查環(huán)境變量是否已經(jīng)設(shè)置。

在 macOS 或 Linux 中可以使用以下命令:

echo $EMAIL

在 Windows 中則可以使用:

echo %EMAIL%

這些命令會輸出對應(yīng)環(huán)境變量的值,如果變量未設(shè)置,則不會有任何輸出。

4. .env 文件的搜索路徑

當(dāng)我們在一個子目錄中調(diào)用 load_dotenv() 函數(shù)時,它會向上級目錄逐層查找 .env 文件。例如,假設(shè)我們在項目根目錄下的 foo/bar/baz 目錄中運(yùn)行程序,load_dotenv() 會依次在 foo/bar/baz、foo/bar、foo 和項目根目錄中查找 .env 文件。

我們也可以通過指定 dotenv_path 參數(shù)來明確指定 .env 文件的路徑:

from pathlib import Path
from dotenv import load_dotenv

env_path = Path('../../../.env')  # 指定 .env 文件的路徑
load_dotenv(dotenv_path=env_path)

5. 覆蓋已存在的環(huán)境變量

默認(rèn)情況下,load_dotenv() 函數(shù)不會覆蓋已經(jīng)存在的環(huán)境變量。如果我們在不同的 .env 文件中定義了相同的環(huán)境變量,只有第一次加載的值會被保留。不過,我們可以通過設(shè)置 override=True 參數(shù)來強(qiáng)制覆蓋已存在的環(huán)境變量:

load_dotenv(dotenv_path=myenv, override=True)

6. 以字典形式讀取環(huán)境變量

除了將環(huán)境變量加載到操作系統(tǒng)中,我們還可以使用 dotenv_values() 函數(shù)將 .env 文件中的內(nèi)容讀取為一個 Python 字典。這在我們不想將環(huán)境變量實(shí)際加載到操作系統(tǒng)中,而只是想在程序內(nèi)部使用這些值時非常有用:

from dotenv import dotenv_values

env_vars = dotenv_values()
for key, value in env_vars.items():
    print(f'{key}: {value}')

這會輸出:

PS E:\BG10-TRN-AIT-AI編程> & D:/01-Development/Conda/envs/py3.12/python.exe e:/BG10-TRN-AIT-AI編程/src/basic/package-dotenv-dotenv_values.py
NAME: 田辛
COMPANY: 田豆芽
EMAIL: tianxin.xp@gmail.com
API_KEY: sf-XXXXXXXXXX
PS E:\BG10-TRN-AIT-AI編程> 

總結(jié)

通過使用 python-dotenv 模塊,我們可以很方便地在不同的環(huán)境中管理配置信息,同時避免將敏感信息直接暴露在代碼中。這個模塊提供了簡單易用的接口來加載和使用環(huán)境變量,無論是通過操作系統(tǒng)的環(huán)境變量還是通過 Python 字典,都能滿足我們的需求。在開發(fā)、測試和部署應(yīng)用程序時,合理地利用環(huán)境變量和 python-dotenv 模塊可以幫助我們更好地管理配置,提高代碼的安全性和可維護(hù)性。

完整代碼

目錄結(jié)構(gòu)

.env

NAME=田辛
COMPANY=田豆芽
EMAIL=tianxin.xp@gmail.com
API_KEY=sf-XXXXXXXXXX

package-dotenv-load_dotenv.py

''' 
此腳本用于從 .env 文件中加載環(huán)境變量,并打印加載結(jié)果和特定環(huán)境變量的值。

模塊功能:
- 嘗試從 .env 文件加載環(huán)境變量。
- 打印環(huán)境變量加載結(jié)果。
- 打印特定環(huán)境變量的值。
'''
import os
from dotenv import load_dotenv

# 嘗試從 .env 文件加載環(huán)境變量,若成功則返回 True,否則返回 False
if load_dotenv():
    # 打印環(huán)境變量加載成功的信息
    print('成功從 .env 文件加載環(huán)境變量')
else:
    # 打印環(huán)境變量加載失敗的信息
    print('未從 .env 文件加載環(huán)境變量')

# 使用 os.getenv 方法獲取名為 'NAME' 的環(huán)境變量的值并打印
print(os.getenv('NAME'))  # 輸出:田辛
# 使用 os.environ 字典獲取名為 'COMPANY' 的環(huán)境變量的值,并賦值給變量 company
company = os.environ['COMPANY']
# 打印變量 company 的值
print(company)  # 輸出:bar
# 使用 os.environ.get 方法獲取名為 'SILICONFLOW_KEY' 的環(huán)境變量的值,若未定義則返回默認(rèn)值 'Nothing'
api_key = os.environ.get('SILICONFLOW_KEY', 'Nothing')  # 原注釋中 'BAZ' 可能為筆誤,此處獲取 'SILICONFLOW_KEY' 的值
# 打印變量 api_key 的值
print(api_key)  # 輸出:default

package-dotenv-dotenv_values.py

''' 
此腳本用于從 .env 文件中加載環(huán)境變量并打印出來。

模塊功能:
- 從 .env 文件讀取環(huán)境變量。
- 遍歷并打印所有環(huán)境變量的鍵值對。
''' 
# 導(dǎo)入 dotenv 庫中的 dotenv_values 函數(shù),用于讀取 .env 文件中的環(huán)境變量
from dotenv import dotenv_values

# 調(diào)用 dotenv_values 函數(shù),將 .env 文件中的環(huán)境變量存儲到字典 env_vars 中
env_vars = dotenv_values()

# 遍歷 env_vars 字典,打印每個環(huán)境變量的鍵值對
for key, value in env_vars.items():
    # 使用 f-string 格式化輸出鍵值對
    print(f'{key}: {value}')

到此這篇關(guān)于淺析如何使用python dotenv模塊管理環(huán)境變量的文章就介紹到這了,更多相關(guān)python dotenv管理環(huán)境變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論