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的主要内容,如果未能解决你的问题,请参考以下文章

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

Python之OS模块

Python3 -- OS模块详解

python 操作文件和目录

os模块

python的os命令