在终端/命令行中临时设置(推荐用于测试)
这种方法设置的环境变量只在当前的终端会话中有效,关闭终端后,变量就会消失,这是最常用和最安全的方式,因为它不会影响整个系统。

Linux / macOS
使用 export 命令。
# 语法: export 变量名="变量值" # 设置一个简单的变量 export MY_API_KEY="12345-abcde-67890" # 设置一个包含路径的变量 export PYTHONPATH="/home/user/my_project/src:/usr/local/lib/python3.9/site-packages" # 验证变量是否已设置 echo $MY_API_KEY echo $PYTHONPATH # 现在在这个终端中运行的 Python 脚本就能访问到这个变量了 python my_script.py
重要提示:如果你想在多个终端会话中都使用这个变量,可以将 export 命令添加到你的 shell 配置文件中(如 ~/.bashrc, ~/.zshrc, ~/.profile)。
# 打开配置文件 (例如使用 vim) vim ~/.bashrc # 在文件末尾添加以下行 export MY_API_KEY="12345-abcde-67890" # 保存文件后,运行以下命令使配置生效 source ~/.bashrc
Windows (Command Prompt / CMD)
使用 set 命令。
# 语法: set 变量名=变量值 # 设置一个简单的变量 set MY_API_KEY=12345-abcde-67890 # 验证变量 echo %MY_API_KEY% # 运行 Python 脚本 python my_script.py
Windows (PowerShell)
使用 $env: 前缀。

# 语法: $env:变量名="变量值" # 设置一个简单的变量 $env:MY_API_KEY="12345-abcde-67890" # 验证变量 Write-Output $env:MY_API_KEY # 运行 Python 脚本 python my_script.py
在 Python 脚本内部设置
如果你想在 Python 脚本运行时动态设置环境变量,可以使用 os 模块,这种方式设置的环境变量只在当前 Python 进程及其子进程中有效,并且只在脚本运行期间存在。
重要提示:在脚本中设置环境变量不会影响你的终端或其他程序,当脚本执行完毕,这些变量就会被销毁。
import os
import sys # 用于演示子进程
# 1. 设置单个环境变量
os.environ['MY_API_KEY'] = '12345-abcde-67890'
# 2. 设置多个环境变量
os.environ['DEBUG_MODE'] = 'True'
os.environ['DATABASE_URL'] = 'postgresql://user:pass@localhost:5432/mydb'
# 3. 验证变量是否已设置
print(f"MY_API_KEY is: {os.environ['MY_API_KEY']}")
print(f"DEBUG_MODE is: {os.environ.get('DEBUG_MODE')}") # 使用 .get() 方法更安全,避免 KeyError
# 4. 检查变量是否存在
if 'DATABASE_URL' in os.environ:
print("DATABASE_URL is set.")
else:
print("DATABASE_URL is not set.")
# 5. 启动一个子进程来验证环境变量是否传递给了子进程
# 在 Linux/macOS 上打印环境变量
print("\n--- Environment variables for a subprocess ---")
subprocess_command = 'echo "Subprocess sees MY_API_KEY as:" $MY_API_KEY'
if sys.platform == "win32":
subprocess_command = 'echo Subprocess sees MY_API_KEY as: %MY_API_KEY%'
os.system(subprocess_command)
# 6. 删除一个环境变量
if 'TEMP_VAR' in os.environ:
del os.environ['TEMP_VAR']
# 7. 获取所有环境变量
# all_env_vars = os.environ
# print("\n--- All environment variables ---")
# for key, value in all_env_vars.items():
# print(f"{key}={value}")
使用 .env 文件(推荐用于项目开发)
在实际项目中,将敏感信息(如 API 密钥、数据库密码)直接硬编码在代码或终端中是不安全的,最佳实践是使用 .env 文件来管理这些变量,并将其添加到 .gitignore 文件中,避免上传到代码仓库。
你需要安装 python-dotenv 库。

pip install python-dotenv
步骤:
-
创建
.env文件: 在你的项目根目录下创建一个名为.env的文件。# .env file MY_API_KEY=12345-abcde-67890 DEBUG_MODE=True DATABASE_URL=postgresql://user:pass@localhost:5432/mydb -
将
.env添加到.gitignore: 在.gitignore文件中添加.env,确保它不会被 Git 追踪。# .gitignore .env __pycache__/ *.pyc -
在 Python 脚本中加载
.env文件:import os from dotenv import load_dotenv # 从项目根目录的 .env 文件加载环境变量 # 你也可以指定文件路径, load_dotenv('/path/to/.env') load_dotenv() # 现在你可以像平常一样访问这些变量 # os.getenv() 会返回字符串,如果变量不存在则返回 None api_key = os.getenv('MY_API_KEY') debug_mode = os.getenv('DEBUG_MODE', 'False') # 提供默认值 'False' # os.environ.get() 也可以,并且可以指定默认值 db_url = os.environ.get('DATABASE_URL') print(f"API Key: {api_key}") print(f"Debug Mode: {debug_mode}") print(f"Database URL: {db_url}") # 你还可以在代码中动态设置变量,它会覆盖 .env 文件中的同名变量 os.environ['NEW_VAR'] = 'I am from Python code' print(f"New Var: {os.getenv('NEW_VAR')}")
如何在 Python 中读取环境变量?
无论变量是如何设置的(终端、脚本、.env 文件),在 Python 中读取它们的方法都是一样的,推荐使用以下两种方法:
-
os.getenv(key, default=None)(推荐)- 优点:更安全,如果环境变量不存在,它会返回
None(或者你提供的default值),而不会抛出KeyError异常。 - 返回值:总是字符串类型。
import os # 安全地获取变量,如果不存在则返回 None api_key = os.getenv('MY_API_KEY') if api_key: print(f"API Key found: {api_key}") else: print("API Key not found.") # 获取变量,如果不存在则使用默认值 port = os.getenv('PORT', '8000') # PORT 未设置,则默认为 '8000' print(f"Server will run on port: {port}") - 优点:更安全,如果环境变量不存在,它会返回
-
os.environ[key]- 缺点:如果环境变量不存在,会抛出
KeyError异常。 - 返回值:字符串类型。
import os try: # 直接访问,如果变量不存在会报错 api_key = os.environ['MY_API_KEY'] print(f"API Key: {api_key}") except KeyError: print("Error: MY_API_KEY environment variable is not set!") - 缺点:如果环境变量不存在,会抛出
总结与最佳实践
| 方法 | 作用域 | 生命周期 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
终端 export |
当前终端会话 | 会话期间 | 简单,不影响系统 | 临时,关闭终端即失效 | 快速测试、临时调试 |
Python os.environ |
当前 Python 进程及子进程 | 脚本运行期间 | 动态控制,可传递给子进程 | 不会影响终端,脚本结束即失效 | 脚本内部逻辑需要动态设置变量 |
.env 文件 |
当前 Python 进程(需加载) | 脚本运行期间 | 安全,易于管理,支持不同环境(开发/生产) | 需要安装 python-dotenv 库 |
项目开发,管理配置和敏感信息 |
核心建议:
- 开发项目时:始终使用
.env文件 +python-dotenv来管理你的配置和密钥,这是行业标准做法。 - 快速测试或临时运行脚本:在终端中使用
export(Linux/macOS) 或$env:(Windows PowerShell) 来快速设置变量。 - 在 Python 代码中读取变量:始终使用
os.getenv(),因为它更安全,可以避免KeyError。
