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

10

我正在使用Twippy库和Twitter API进行Twitter机器人教程,具体可以参考:https://realpython.com/twitter-bot-python-tweepy/

我已经设置好config.py文件,并在Windows环境变量中设置了所有token作为用户变量。但是当我运行文件时,出现错误,因为os.getenv()检索我的token时返回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设置用户环境变量吗?还是通过命令行进行设置?在运行Python程序之前,你是否启动了新的cmd行?在运行Python脚本之前,你能看到这些值吗? - LhasaDad
@LhasaDad 我在 GUI(系统属性窗口)中设置了用户环境变量。在设置完毕后,我通过运行命令行并对每个变量执行“echo”来查看我的值。但是在此之后,当我运行我的脚本时,os.getenv() 返回所有变量的 None。 - Hannah Bernal
1
你是怎么运行你的脚本的?从集成开发环境吗?你重启了它以便获取环境变量更改吗? - LhasaDad
@LhasaDad 啊,重启后它就好了!在设置变量后,我没有重新启动VS Code,所以在我这样做并运行脚本后,它得到了正确的值。谢谢你,我很感激你的帮助! - Hannah Bernal
有一种方法可以从 VS Code 中传递变量进行启动。明天我会发布一个带有该方法的答案。 - LhasaDad
4个回答

6

这是一个问题,因为从另一个进程生成的进程会继承其环境变量集合。在这种情况下,启动代码的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则是分配给它们的字符串。

1
在这种情况下,启动代码的集成开发环境需要重新启动。 这对我解决了问题(在Windows 10上,在SublimeText上运行Python)。 - Lfppfs

5

如果 os.getenv() 不起作用,可以使用 decouple。只需要执行 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
新手报道。我重启了VSCode,但它仍然无法工作。直到我重新启动了VSCode并关闭了项目文件夹,然后再次打开它才行。
从这里学习https://youtu.be/M576WGiDBdQ?t=14649

1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - garg10may

0

我曾经遇到过完全相同的问题,重启电脑解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接