当前位置: 首页 > news >正文

Python-env变量读取

Python-env变量读取

记录Python进行环境变量的读取->最佳实践【dotenv】+【os】

1-知识整理

  • 1)使用python自带的os进行【环境变量】读取

    import os
    home = os.getenv('OPEN_API_KEY')
    print(home, path)
    
  • 2)使用python-dotenv

    # 依赖安装
    pip install python-dotenv# 代码逻辑
    from pathlib import Path
    from dotenv import load_dotenv
    import os# 使用dotenv读取配置文件的配置到环境变量
    load_dotenv(Path(__file__).resolve().parent / ".env")   # 显式给路径,避免找不到# 再使用os进行环境变量读取
    OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
    DEBUG = os.getenv("DEBUG", "false").lower() == "true"
    

2-参考网址

  • 【阿里百炼】linux/macos/windows不同的配置参考:https://bailian.console.aliyun.com/?spm=5176.29619931.J__Z58Z6CX7MY__Ll8p1ZOR.1.38fe521cU3isvj&tab=api#/api/?type=model&url=2803795


3-知识详解

1-os读取环境变量

在 Python 里,os.getenv 是标准库 os 提供的最常用、最安全的“读环境变量”接口。
它只做一件事:到当前进程的环境变量表里找指定名字,找到了就返回字符串,找不到就返回 None(或你指定的默认值)。


1. 基本用法

import os# 读取单个变量
home = os.getenv('HOME')          # Linux/macOS 例子
path = os.getenv('PATH')          # 所有系统都有
print(home, path)# 变量不存在时避免 None
port = os.getenv('APP_PORT', '8000')   # 没配就默认 8000
debug = os.getenv('DEBUG', '').lower() in ('1', 'true', 'yes')

2. 与 os.environ 的区别

特性os.getenv(key, default)os.environ[key]
找不到时返回 default / None抛 KeyError
类型函数调用类似 dict 的映射
能否改值只读可写:os.environ['x']='y'
线程安全是(但改值需加锁)

90% 的场景用 os.getenv 就够了;只有需要“强制必须存在”或需要修改时才用 os.environ


3. 常见踩坑

  1. 大小写敏感
    Windows 在系统层面不区分大小写,但 os.getenv 内部仍区分;建议统一大写。
  2. 子进程隔离
    在代码里 os.environ['X']='y' 只会影响当前进程及其后续子进程,不会影响调用你的 shell
  3. PyCharm / VS Code 终端
    在 IDE 里运行脚本时,IDE 会重新加载环境;如果改完 .bashrc重启 IDE 或重新打开终端
  4. Docker / systemd
    容器或 service 文件里写 ENV KEY=value 才是运行时可见;构建阶段的 ENV 对运行时也有效,但 ARG 无效。

4. 批量读取(可选技巧)

from typing import Dictdef envmap(*keys: str, **defaults: str) -> Dict[str, str]:"""一次性取多个变量,支持默认值"""return {k: os.getenv(k, defaults.get(k, '')) for k in keys}cfg = envmap('DB_HOST', 'DB_PORT', 'DB_USER', DB_PASSWORD='secret')

5. 完整示例:小型配置模块

# config.py
import osclass Config:# 数据库DB_HOST = os.getenv('DB_HOST', '127.0.0.1')DB_PORT = int(os.getenv('DB_PORT', '5432'))DB_USER = os.getenv('DB_USER', 'postgres')DB_PASS = os.getenv('DB_PASSWORD')        # 必须显式配置if DB_PASS is None:raise RuntimeError('环境变量 DB_PASSWORD 未设置')# 业务DEBUG   = os.getenv('DEBUG', '').lower() == 'true'LOG_LVL = 'DEBUG' if DEBUG else 'INFO'# 其他文件
# from config import Config
# print(Config.DB_HOST)

6. 一句话总结

value = os.getenv('KEY', '默认值')

记住:
“读用 getenv,写用 environ,找不到就抛错用 environ[key],其余场景全用 getenv 最安全。”


2-dotenv读取业务参数

在 Python 里“管理”API_KEY 这类敏感环境变量,核心就三件事:

  1. 永远不把明文写进源码;
  2. 运行时能“无感”读到;
  3. 不同机器/部署阶段切换方便。

下面给出一条“从开发到上线”的常用路线,按推荐程度排序,你按需取用即可。


  1. 本地开发:.env 文件 + python-dotenv(最简单)

  1. 安装

    pip install python-dotenv
    
  2. 项目根目录建一个 .env 文件(记得 .gitignore 里加一行 .env

    OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    DEBUG=true
    
  3. 代码里一次性加载

    # settings.py
    from pathlib import Path
    from dotenv import load_dotenv
    import osload_dotenv(Path(__file__).resolve().parent / ".env")   # 显式给路径,避免找不到OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
    DEBUG = os.getenv("DEBUG", "false").lower() == "true"
    
  4. 其他模块直接 from settings import OPENAI_API_KEY 即可。
    换电脑只需复制 .env,不用改代码。


  1. 多环境/容器:shell 环境变量优先

  • 本地 export OPENAI_API_KEY=sk-xxx 即可覆盖 .env 里的值,方便临时调试。

  • Docker / docker-compose 里写:

    # docker-compose.yml
    services:app:environment:- OPENAI_API_KEY=${OPENAI_API_KEY}   # 从宿主机继承
    
  • Kubernetes、GitHub Actions、Vercel、Heroku 等都提供 UI 或 CLI 注入环境变量,
    原理一样:启动前由平台把变量写进容器进程的环境,代码里 os.getenv 就能读到。


  1. 生产加密:托管机密服务(可选)

  • AWS → AWS Secrets Manager / Parameter Store
  • GCP → Secret Manager
  • Azure → Key Vault

官方 SDK 都支持 client.get_secret("OPENAI_API_KEY")
配合 IAM 角色,服务器无需在本地落盘任何明文。
代价是增加一次网络请求和 IAM 配置,适合对合规要求高的场景。


  1. 常见坑

  1. .env 误提交到 GitHub → 立刻轮换密钥,用 git-filter-repo 清历史。
  2. Windows PowerShell 设置变量用 $Env:OPENAI_API_KEY="sk-xxx",不是 export
  3. os.environ["OPENAI_API_KEY"] 在变量不存在时会抛 KeyError
    os.getenv("OPENAI_API_KEY") 更稳,可给默认值。
  4. Jupyter / VS Code 重启内核后环境变量会刷新,
    如果 .env 改了要 load_dotenv(override=True) 或重启内核。

  1. 一句话总结

开发阶段用 .env + python-dotenv
上线后让平台把变量注进进程环境,
代码里永远只通过 os.getenv 读取,
这样本地、CI、生产都能无痛切换,也永远不会把密钥写进仓库。

http://www.dtcms.com/a/541096.html

相关文章:

  • 仓颉编程(19)函数语法糖
  • idea中更新github token 登录github
  • win11 访问 Win10 共享文件出现扩展错误
  • 网站建设超链接制作卖老石器老榆木做哪个网站好
  • conda 基础命令使用
  • OpenAI完成了其盈利结构的重组
  • 测试开发话题03---BUG篇
  • Rust中的闭包
  • 辽宁省建设信息网福州网站推广优化
  • Physical AI:赋能工业运营中的新一代生产力和生产关系
  • 网站关键词价格徐州网站建设新闻
  • Swift-Mapping: Online Neural Implicit Dense Mapping in Urban Scenes 论文学习记录
  • Rust性能优化与最佳实践:构建高性能服务端与客户端应用
  • 海口网站建设过程全国做网站的
  • 网站建设一般满足什么需求电商网站怎么制作
  • 【若依前后端分离版,docker部署到服务器流程详解】
  • 想注册一个设计网站吗自己做的网站403
  • 没有基础怎么学网站建设python做网站教程
  • 网站构建代码模板北京公司网站优化
  • Ruby 范围(Range)
  • C学习过程记录
  • 企业微信自建应用后通过api给用户发消息
  • 岳池发展建设集团有限公司门户网站怎样看网页的友情链接
  • 亚马逊网站怎么做软件开发网站建设维护
  • 【VLNs篇】11:Dynam3D: 动态分层3D令牌赋能视觉语言导航中的VLM
  • 算法复杂度
  • Quant4.0,基于AgentScope开发 | 年化316%,回撤14%的超级轮动策略,附python代码
  • 第三方检测机构如何选对LIMS?以“数治”破解效率与合规难题
  • 建设网站需要什么手续设计公司网站 唐山
  • 网站接入地查询织梦网站修改数据库表数据