You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python os.getenv无法读取DigitalOcean droplet上~/.profile定义的环境变量

问题原因

  • 首先你缺少export声明:~/.profile中直接写PRODUCTION=1定义的是shell本地变量,仅对当前shell进程生效,不会传递给shell启动的子进程(包括Python进程),只有加了export的变量才会成为全局环境变量被子进程继承。
  • 其次~/.profile仅对登录式shell生效:如果你的Python脚本是在非登录shell环境下运行(比如后台服务、非交互执行脚本、用su切换用户未加-l参数等场景),不会加载该配置文件,自然无法读取变量。如果你使用的默认shell不是bash(比如zsh),也不会默认加载~/.profile,会读取对应shell的专属配置文件。

你可以先在当前终端执行echo $PRODUCTION快速定位问题:如果输出为空,说明当前shell未加载配置;如果能输出1,就是缺少export导致的问题。

修复方案

直接修复当前配置

把~/.profile里的变量定义改成:

export PRODUCTION=1

修改后执行source ~/.profile让当前shell立即加载配置,再运行Python测试即可读取到变量。

替代的永久配置方案(不使用.profile)

按生效范围选择即可:

  • 仅对当前用户所有shell生效:如果你用bash可以写入~/.bashrc,用zsh写入~/.zshrc,变量前统一加export。
  • 对系统所有用户全局生效:写入/etc/environment,这个文件不需要加export,直接写PRODUCTION=1即可,系统登录时会自动为所有用户加载。
  • 项目级隔离配置(更推荐,避免全局变量污染):在Python项目根目录新建.env文件写入PRODUCTION=1,安装python-dotenv库后在脚本开头加载配置即可:
    from dotenv import load_dotenv
    load_dotenv() # 会自动读取当前目录下.env文件的变量
    

内容的提问来源于stack exchange,提问作者Milano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:00