本文目录导读:

我来给你介绍Python读取系统环境变量的几种方法及案例。
使用 os.environ 字典
这是最常用的方法,os.environ 是一个包含所有环境变量的字典。
import os
# 获取所有环境变量(字典形式)
print("所有环境变量:")
for key, value in os.environ.items():
print(f"{key}: {value}")
# 获取单个环境变量
path = os.environ.get('PATH')
print(f"\nPATH环境变量: {path}")
# 获取不存在的变量(返回None)
not_exist = os.environ.get('NOT_EXIST_VARIABLE')
print(f"不存在的变量: {not_exist}")
# 获取不存在的变量(设置默认值)
default_var = os.environ.get('MY_CUSTOM_VAR', 'default_value')
print(f"带默认值的变量: {default_var}")
使用 os.getenv() 函数
更简洁的方式,专门用于获取环境变量:
import os
# 获取单个环境变量
home = os.getenv('HOME') # Linux/Mac
# home = os.getenv('USERPROFILE') # Windows
print(f"Home目录: {home}")
# 带默认值
debug = os.getenv('DEBUG_MODE', 'false')
print(f"调试模式: {debug}")
# 类型转换示例
thread_count = int(os.getenv('THREAD_COUNT', '4'))
print(f"线程数: {thread_count}")
使用 os.environ 的键访问
直接通过键访问,但需要处理异常:
import os
# 直接访问(不存在会抛出KeyError)
try:
my_var = os.environ['MY_VARIABLE']
print(f"环境变量MY_VARIABLE: {my_var}")
except KeyError:
print("环境变量MY_VARIABLE不存在")
# 使用in检查是否存在
if 'DATABASE_URL' in os.environ:
print(f"数据库连接: {os.environ['DATABASE_URL']}")
else:
print("未设置数据库连接")
实际应用案例
案例1:数据库配置
import os
import mysql.connector # 假设使用mysql
class DatabaseConfig:
def __init__(self):
self.host = os.getenv('DB_HOST', 'localhost')
self.port = int(os.getenv('DB_PORT', '3306'))
self.user = os.getenv('DB_USER', 'root')
self.password = os.getenv('DB_PASSWORD', '')
self.database = os.getenv('DB_NAME', 'test')
def get_connection(self):
return mysql.connector.connect(
host=self.host,
port=self.port,
user=self.user,
password=self.password,
database=self.database
)
# 使用示例
config = DatabaseConfig()
print(f"数据库配置: {config.host}:{config.port}")
案例2:API密钥配置
import os
import requests
class APIClient:
def __init__(self):
self.api_key = os.environ.get('API_KEY')
if not self.api_key:
raise ValueError("请设置API_KEY环境变量")
self.api_url = os.getenv('API_URL', 'https://api.example.com')
# 环境切换
self.env = os.getenv('APP_ENV', 'development')
print(f"当前运行环境: {self.env}")
def call_api(self, endpoint):
headers = {
'Authorization': f'Bearer {self.api_key}',
'Content-Type': 'application/json'
}
response = requests.get(
f"{self.api_url}/{endpoint}",
headers=headers
)
return response.json()
# 使用示例
try:
client = APIClient()
# 调用API
# result = client.call_api('users')
except ValueError as e:
print(f"配置错误: {e}")
案例3:多环境配置管理
import os
class AppConfig:
"""应用程序配置管理器"""
def __init__(self):
self.env = os.getenv('APP_ENV', 'development')
self.load_config()
def load_config(self):
"""根据环境加载配置"""
if self.env == 'production':
self.debug = False
self.log_level = 'ERROR'
elif self.env == 'staging':
self.debug = True
self.log_level = 'INFO'
else: # development
self.debug = True
self.log_level = 'DEBUG'
# 数据库配置
self.db_config = {
'host': os.getenv(f'DB_HOST_{self.env.upper()}', 'localhost'),
'port': int(os.getenv(f'DB_PORT_{self.env.upper()}', '5432')),
'user': os.getenv(f'DB_USER_{self.env.upper()}', 'admin'),
'password': os.getenv(f'DB_PASSWORD_{self.env.upper()}', ''),
}
def print_config(self):
print(f"当前环境: {self.env}")
print(f"调试模式: {self.debug}")
print(f"日志级别: {self.log_level}")
print(f"数据库配置: {self.db_config}")
# 使用示例
config = AppConfig()
config.print_config()
设置环境变量的方法
import os
# 设置临时环境变量(仅当前进程有效)
os.environ['TEMP_VARIABLE'] = 'temporary_value'
print(f"临时变量: {os.getenv('TEMP_VARIABLE')}")
# 删除环境变量
if 'TEMP_VARIABLE' in os.environ:
del os.environ['TEMP_VARIABLE']
print("临时变量已删除")
在命令行设置环境变量
# Linux/Mac export MY_VARIABLE=my_value export DATABASE_URL=mysql://user:pass@localhost/db # Windows set MY_VARIABLE=my_value set DATABASE_URL=mysql://user:pass@localhost/db
使用 .env 文件(最佳实践)
首先安装 python-dotenv:
pip install python-dotenv
创建一个 .env 文件:
DATABASE_URL=mysql://user:pass@localhost/mydb
API_KEY=your_secret_key_here
APP_ENV=development
DEBUG=true
在代码中加载:
from dotenv import load_dotenv
import os
# 加载.env文件
load_dotenv()
# 现在可以直接使用环境变量
db_url = os.getenv('DATABASE_URL')
api_key = os.getenv('API_KEY')
print(f"数据库连接: {db_url}")
print(f"API KEY: {api_key[:5]}...")
注意事项
- 安全性:不要在代码中硬编码敏感信息,使用环境变量存储密码、密钥等
- 类型转换:环境变量都是字符串,需要手动转换为其他类型
- 默认值:始终为环境变量提供合理的默认值
- 环境管理:使用不同的
.env文件管理开发、测试、生产环境
这些方法基本覆盖了Python操作环境变量的所有常见场景。