Python os.getenv() 在设置 Windows 环境变量时返回 None
Posted
技术标签:
【中文标题】Python os.getenv() 在设置 Windows 环境变量时返回 None【英文标题】:Python os.getenv() returning None when set Windows environment variables 【发布时间】:2020-12-12 14:48:29 【问题描述】:我正在关注使用 Twippy 库和 Twitter API 的 Twitter 机器人教程:https://realpython.com/twitter-bot-python-tweepy/
我设置了 config.py 文件并将我的 Windows 环境变量设置为带有我所有令牌的用户变量。但是当我运行我的文件时,它会给出一个错误,因为 os.getenv() 在检索我的令牌时是 None
consumer_key = os.getenv("CONSUMER_KEY")
consumer_secret = os.getenv("CONSUMER_SECRET")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
在 Windows 终端中,我打印了这些变量中的每一个,它们都是正确的。我在这里缺少什么吗?非常感谢任何帮助!
【问题讨论】:
当您说设置用户变量时,您是说您通过 gui 设置它来设置用户环境变量吗?还是你做了命令行?您是否启动了一个新的 cmd 行来运行 python 程序?在运行 python 脚本之前你能看到值吗? @LhasaDad 我在 gui(系统属性窗口)中设置了用户环境变量。在我设置这些之后,我可以通过运行命令行并对我的每个变量执行“回显”来查看我的值。但在那之后,当我运行我的脚本时,os.getenv() 为所有变量返回 None 你是如何运行你的脚本的?从一个ide?您是否重新启动它以获取 env var 更改? @LhasaDad 啊重启成功了!设置变量后我没有重新启动 VS Code,所以在我这样做并运行我的脚本之后,它得到了正确的值。谢谢,感谢您的帮助! 有一种方法可以在从 vs 代码启动时传入 vars。将在早上发布答案 【参考方案1】:纽比在这里。我重新启动了 VSCode,但它仍然没有工作。直到我重新启动VSCode,并关闭项目文件夹,然后重新打开它。
向这个https://youtu.be/M576WGiDBdQ?t=14649学习
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review【参考方案2】:如果os.getenv()
不起作用,您可以使用解耦。只需执行pip install python-decouple
然后在代码中执行from decouple import config
即可:
consumer_key = config('CONSUMER_KEY')
consumer_secret = config('CONSUMER_SECRET')
access_token = config('ACCESS_TOKEN')
access_token_secret = config('ACCESS_TOKEN_SECRET')
这在我的情况下有效。希望它也适用于您的情况。
【讨论】:
【参考方案3】:所以这是一个问题,即从另一个进程派生的进程继承其环境变量集。在这种情况下,需要重新启动正在使用的启动代码的 IDE。 VS Code 的替代方法是使用指定的环境启动项目。这可以通过将 env 选项添加到启动配置来完成:
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "$file",
"console": "integratedTerminal"
"env": "VAR_NAME": "VAR_VALUE"
"VAR_NAME2": "VAR_VALUE2"
,
在这种情况下,VAR_NAME 和 VAR_NAME2 是环境变量名称。 VAR_VALUE 和 VAR_VALUE2 将是分配给它们的字符串。
【讨论】:
以上是关于Python os.getenv() 在设置 Windows 环境变量时返回 None的主要内容,如果未能解决你的问题,请参考以下文章