Fedora 32下Python读取os环境变量报KeyError: 'ENV'问题求助
问题原因
- 你在终端执行的
export ENV=PRO只作用于当前终端会话,仅对该终端内启动的子进程生效:- 如果你是通过图形界面菜单/桌面快捷方式启动的PyCharm,没有继承当前终端的环境变量,因此PyCharm启动的Python进程也读不到这个变量
- 即使你是从终端启动的PyCharm,如果后续关闭了终端、或者在新的终端窗口重新export变量,已经运行的PyCharm也不会同步更新环境变量
- 没有把环境变量写入持久化配置,重启终端后变量就会自动失效
- PyCharm的运行/调试配置默认不会继承系统全部环境变量,也可能是自定义配置覆盖了系统环境值
解决方法
方案1:临时生效(仅当前PyCharm运行配置有效)
- 点击PyCharm右上角运行按钮旁的下拉框,选择「Edit Configurations」
- 找到你运行的
schedulespider.py对应的配置项 - 找到「Environment variables」选项,点击后面的文件夹图标
- 点击加号添加一行,名称填
ENV,值填PRO,保存后重新运行即可
方案2:持久化环境变量(所有进程通用)
把变量写入用户shell配置文件,以Fedora默认的bash为例:
- 终端执行
nano ~/.bashrc,在文件末尾添加一行:
export ENV=PRO
- 保存退出后执行
source ~/.bashrc让配置立即生效 - 完全关闭PyCharm,从该终端执行命令启动PyCharm,后续启动的Python进程就能正常读到该变量
如果你用的shell是zsh,把配置写到~/.zshrc里即可。
方案3:修改代码兼容无变量场景
不想改环境配置的话,可以调整读取变量的代码,避免抛出KeyError:
import os # 优先读取环境变量,不存在时返回自定义默认值 current_env = os.environ.get("ENV", "DEV")
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

