杰瑞科技汇

Python export环境变量,如何正确设置与使用?

在终端/命令行中临时设置(推荐用于测试)

这种方法设置的环境变量只在当前的终端会话中有效,关闭终端后,变量就会消失,这是最常用和最安全的方式,因为它不会影响整个系统。

Python export环境变量,如何正确设置与使用?-图1
(图片来源网络,侵删)

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: 前缀。

Python export环境变量,如何正确设置与使用?-图2
(图片来源网络,侵删)
# 语法: $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 库。

Python export环境变量,如何正确设置与使用?-图3
(图片来源网络,侵删)
pip install python-dotenv

步骤:

  1. 创建 .env 文件: 在你的项目根目录下创建一个名为 .env 的文件。

    # .env file
    MY_API_KEY=12345-abcde-67890
    DEBUG_MODE=True
    DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
  2. .env 添加到 .gitignore: 在 .gitignore 文件中添加 .env,确保它不会被 Git 追踪。

    # .gitignore
    .env
    __pycache__/
    *.pyc
  3. 在 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 中读取它们的方法都是一样的,推荐使用以下两种方法:

  1. 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}")
  2. 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 项目开发,管理配置和敏感信息

核心建议:

  1. 开发项目时:始终使用 .env 文件 + python-dotenv 来管理你的配置和密钥,这是行业标准做法。
  2. 快速测试或临时运行脚本:在终端中使用 export (Linux/macOS) 或 $env: (Windows PowerShell) 来快速设置变量。
  3. 在 Python 代码中读取变量:始终使用 os.getenv(),因为它更安全,可以避免 KeyError
分享:
扫描分享到社交APP
上一篇
下一篇