Skip to content

环境变量

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: Config 中了解更多相关信息。

类型和验证

这些环境变量只能处理 文本字符串,因为它们在 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环境变量,那么安装程序会将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中使用它们有了基本的了解。

你还可以在环境变量的维基百科中了解更多信息。

在许多情况下,环境变量的用处和适用性并不十分明显。但当你进行开发时,它们会在许多不同的场景中不断出现,因此了解它们是很有好处的。

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