跳转至

环境变量

Tip

如果你已经知道什么是“环境变量”并且知道如何使用它们,你可以放心跳过这一部分。

环境变量(也称为“env var”)是一个独立于 Python 代码之外的变量,它存在于操作系统中,可以被你的 Python 代码(或其他程序)读取。

环境变量对于处理应用程序设置、作为 Python 安装的一部分等方面非常有用。

创建和使用环境变量

你在 shell(终端)中就可以创建和使用环境变量,并不需要用到 Python:

// 你可以使用以下命令创建一个名为 MY_NAME 的环境变量
$ export MY_NAME="Wade Wilson"

// 然后,你可以在其他程序中使用它,例如
$ echo "Hello $MY_NAME"

Hello Wade Wilson
// 创建一个名为 MY_NAME 的环境变量
$ $Env:MY_NAME = "Wade Wilson"

// 在其他程序中使用它,例如
$ echo "Hello $Env:MY_NAME"

Hello Wade Wilson

在 Python 中读取环境变量

你也可以在 Python 之外的终端中创建环境变量(或使用任何其他方法),然后在 Python 中读取它们。

例如,你可以创建一个名为 main.py 的文件,其中包含以下内容:

import os

name = os.getenv("MY_NAME", "World")
print(f"Hello {name} from Python")

Tip

第二个参数是 os.getenv() 的默认返回值。

如果没有提供,默认值为 None,这里我们提供 "World" 作为默认值。

然后你可以调用这个 Python 程序:

// 这里我们还没有设置环境变量
$ python main.py

// 因为我们没有设置环境变量,所以我们得到的是默认值

Hello World from Python

// 但是如果我们事先创建过一个环境变量
$ export MY_NAME="Wade Wilson"

// 然后再次调用程序
$ python main.py

// 现在就可以读取到环境变量了

Hello Wade Wilson from Python
// 这里我们还没有设置环境变量
$ python main.py

// 因为我们没有设置环境变量,所以我们得到的是默认值

Hello World from Python

// 但是如果我们事先创建过一个环境变量
$ $Env:MY_NAME = "Wade Wilson"

// 然后再次调用程序
$ python main.py

// 现在就可以读取到环境变量了

Hello Wade Wilson from Python

由于环境变量可以在代码之外设置、但可以被代码读取,并且不必与其他文件一起存储(提交到 git),因此通常用于配置或设置

你还可以为特定的程序调用创建特定的环境变量,该环境变量仅对该程序可用,且仅在其运行期间有效。

要实现这一点,只需在同一行内、程序本身之前创建它:

// 在这个程序调用的同一行中创建一个名为 MY_NAME 的环境变量
$ MY_NAME="Wade Wilson" python main.py

// 现在就可以读取到环境变量了

Hello Wade Wilson from Python

// 在此之后这个环境变量将不会依然存在
$ python main.py

Hello World from Python

Tip

你可以在 The Twelve-Factor App: 配置中了解更多信息。

类型和验证

这些环境变量只能处理文本字符串,因为它们是处于 Python 范畴之外的,必须与其他程序和操作系统的其余部分兼容(甚至与不同的操作系统兼容,如 Linux、Windows、macOS)。

这意味着从环境变量中读取的任何值在 Python 中都将是一个 str,任何类型转换或验证都必须在代码中完成。

你将在高级用户指南 - 设置和环境变量中了解更多关于使用环境变量处理应用程序设置的信息。

PATH 环境变量

有一个特殊的环境变量称为 PATH,操作系统(Linux、macOS、Windows)用它来查找要运行的程序。

PATH 变量的值是一个长字符串,由 Linux 和 macOS 上的冒号 : 分隔的目录组成,而在 Windows 上则是由分号 ; 分隔的。

例如,PATH 环境变量可能如下所示:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

这意味着系统应该在以下目录中查找程序:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32

这意味着系统应该在以下目录中查找程序:

  • C:\Program Files\Python312\Scripts
  • C:\Program Files\Python312
  • C:\Windows\System32

当你在终端中输入一个命令时,操作系统会在 PATH 环境变量中列出的每个目录查找程序。

例如,当你在终端中输入 python 时,操作系统会在该列表中的第一个目录中查找名为 python 的程序。

如果找到了,那么操作系统将使用它;否则,操作系统会继续在其他目录中查找。

安装 Python 和更新 PATH

安装 Python 时,可能会询问你是否要更新 PATH 环境变量。

假设你安装 Python 并最终将其安装在了目录 /opt/custompython/bin 中。

如果你同意更新 PATH 环境变量,那么安装程序将会将 /opt/custompython/bin 添加到 PATH 环境变量中。

它看起来大概会像这样:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin

如此一来,当你在终端中输入 python 时,系统会在 /opt/custompython/bin 中找到 Python 程序(最后一个目录)并使用它。

假设你安装 Python 并最终将其安装在了目录 C:\opt\custompython\bin 中。

如果你同意更新 PATH 环境变量 (在 Python 安装程序中,这个操作是名为 Add Python x.xx to PATH 的复选框 —— 译者注),那么安装程序将会将 C:\opt\custompython\bin 添加到 PATH 环境变量中。

C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin

如此一来,当你在终端中输入 python 时,系统会在 C:\opt\custompython\bin 中找到 Python 程序(最后一个目录)并使用它。

因此,如果你输入:

$ python

系统会在 /opt/custompython/bin找到 python 程序并运行它。

这和输入以下命令大致等价:

$ /opt/custompython/bin/python

系统会在 C:\opt\custompython\bin\python找到 python 程序并运行它。

这和输入以下命令大致等价:

$ C:\opt\custompython\bin\python

当学习虚拟环境时,这些信息将会很有用。

结论

通过这个教程,你应该对环境变量是什么以及如何在 Python 中使用它们有了基本的了解。

你也可以在环境变量 - 维基百科 (Wikipedia for Environment Variable) 中了解更多关于它们的信息。

在许多情况下,环境变量的用途和适用性并不是很明显。但是在开发过程中,它们会在许多不同的场景中出现,因此了解它们是很有必要的。

例如,你将在下一节关于虚拟环境中需要这些信息。