【问题标题】:Access environment variable in macOS from python从 python 访问 macOS 中的环境变量
【发布时间】:2021-08-13 05:28:40
【问题描述】:

我没有 .bash_profile 文件,所以我创建了一个,其中唯一的一行是:

YOUTUBE_API=someRandomString

在我的 .zshrc 文件中,第一行是这样的:

source ~/.bash_profile

我可以从命令行运行这个:

echo $YOUTUBE_API

这给了我正确的输出(我的 API 密钥)。

但是当我尝试在 Python 中执行此操作时,它返回 None:

import os
print(os.environ.get('YOUTUBE_API'))

我正在运行 python 版本 3.9.4。知道为什么,以及如何解决吗?

谢谢

【问题讨论】:

  • 我不知道如何进行这项工作,但我的建议是不要依赖程序中的环境变量,因为它会产生不可见的依赖关系。我的建议是从命令行获取值,或对其进行硬编码,或将其放入特定于程序的初始化文件中,或类似的东西。
  • 我强烈反对。环境变量非常适合因系统而异的配置选项。它们是一种成熟的配置技术。
  • @calvinhus : YOUTUBE_API 不是环境变量。 echo 不会透露这一点。您将不得不使用printenv YOUTUBE_API 之类的东西,或者-如果printenv 不可用-,env|grep -xF YOUTUBE_API

标签: python bash macos environment-variables zshrc


【解决方案1】:

你需要

export YOUTUBE_API=someRandomString

否则,该变量可用于本地 shell,但不可用于任何子进程。

【讨论】:

    【解决方案2】:

    这仅取决于您从何处运行代码:

    • 如果代码运行的进程有变量集,它不应该是None
    • 如果你在另一个进程中运行代码,你会得到None

    说明:

    每个进程 ID 都有自己的环境,存储在 /proc/<pid>/environ 文件中,其中存储了本地未导出的变量。一旦进程停止,此路径就会被删除。

    完成这项工作的唯一方法是在启动程序之前在 shell 中导出变量,或者运行 YOUTUBE_API=someRandomString python <your python file>

    【讨论】:

    • 差不多。它不依赖于一个新的 shell,它依赖于一个新的进程。
    • 同意,不够清楚,修好了。
    • 嗯,这真的没有更好的。壳牌无关紧要。他在同一个 shell 中运行 Python,但变量不可用,因为这是一个新进程,但不是新 shell。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多