python os.getenv 看不到 ~/.profile 中定义的变量

Posted

技术标签:

【中文标题】python os.getenv 看不到 ~/.profile 中定义的变量【英文标题】:python os.getenv can't see variables defined in ~/.profile 【发布时间】:2021-11-03 20:02:26 【问题描述】:

我正在尝试为我的 python 项目在 DigitalOcean droplet 上设置一些环境变量。

我把它们放到~/.profile 文件中。现在看起来像这样:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

PRODUCTION=1

droplet 重置后,我尝试在 python 脚本中获取 PRODUCTION,但它返回 None。

>>> import os
>>> os.getenv('PRODUCTION')
>>>

我做错了什么?如果不是.profile,我应该使用什么文件来永久设置这些变量?

【问题讨论】:

你试过export PRODUCTION=1吗? 正如@nic3500 暗示的那样,您还没有将shell 变量导出到环境中。运行 somevar=1 创建一个 shell 变量;它不在环境中,对子进程不可见。如果你明确地export它,你只会得到一个环境变量。 【参考方案1】:

因为我也花了一些时间搜索所以发布答案

正如两个 cmets 所述,您需要在 ~/profile 文件中专门导出变量

# Use this
export MYVAR=1

# NOT this
MYVAR=1

【讨论】:

以上是关于python os.getenv 看不到 ~/.profile 中定义的变量的主要内容,如果未能解决你的问题,请参考以下文章

Python os.getenv() 在设置 Windows 环境变量时返回 None

os.getenv 和 os.environ.get 的区别

python 操作文件和目录

os.GetEnv()在设置env变量后不起作用

Jenkins中集成python,支持参数生成Makefile文件

python os模块汇总