Flask中os.environ.get()获取环境变量TOKEN返回None的问题
解决Flask中获取环境变量TOKEN的常见问题
我来帮你逐个拆解这些环境变量相关的问题,都是Flask开发里很容易踩的坑:
1. Windows下export命令无效,os.environ.get()返回None
export是Linux/macOS这类类Unix系统的shell命令,Windows的命令行环境不识别它,得用对应系统的命令设置临时环境变量:
- 如果你用的是CMD,执行:
set TOKEN=666 - 如果你用的是PowerShell,执行:
$env:TOKEN="666"
设置完成后再启动你的Flask应用,os.environ.get("TOKEN")就能正常获取到值了。要是需要永久生效,直接去系统的「环境变量」面板配置就行(控制面板→系统→高级系统设置→环境变量)。
2. 用sudo python3 manage.py runserver时TOKEN为空
sudo会切换到root用户身份运行程序,而root用户的环境变量和你当前普通用户的环境变量是完全隔离的——你在普通用户下设置的TOKEN不会被root进程继承。有几个解决办法:
- 直接把环境变量传递给sudo进程:
sudo TOKEN=666 python3 manage.py runserver - 先切换到root用户,设置好环境变量再启动应用:
sudo su export TOKEN=666 python3 manage.py runserver - 把TOKEN添加到root用户的shell配置文件(比如
/root/.bashrc)里,不过这种方式要注意权限,别让敏感信息被其他用户读取。
3. 直接设置os.environ['TOKEN']='666'的安全隐患解决办法
硬编码敏感信息到代码里确实非常危险,一旦代码提交到版本库(比如GitHub),你的TOKEN就彻底泄露了。推荐几个安全的替代方案:
- 使用
.env文件管理敏感变量:
先安装python-dotenv包:
在项目根目录创建pip install python-dotenv.env文件,写入:
然后在你的TOKEN=666config.py里加载这个文件:
关键一步:把from dotenv import load_dotenv import os load_dotenv() # 自动加载.env文件中的环境变量 TOKEN = os.environ.get("TOKEN").env文件添加到.gitignore里,绝对不要提交到版本库。 - 使用系统级永久环境变量:不管是Windows还是Linux/macOS,直接在系统层面设置永久环境变量,这样Flask应用启动时会自动读取,不需要在代码里硬编码。
- Flask配置类结合环境变量:可以在配置类里通过环境变量获取值,还能加个 fallback(不过敏感信息不建议设默认值):
class Config: TOKEN = os.environ.get("TOKEN")
内容的提问来源于stack exchange,提问作者Lainly
相关产品推荐
相关产品推荐

