UV Python 打包:如何在虚拟环境中设置环境变量
UV Python 打包:如何在虚拟环境中设置环境变量
嘿,我之前也踩过这个坑!直接修改activate_this.py确实起不了作用,因为UV的虚拟环境激活逻辑和传统virtualenv不一样,那个文件主要是给外部程序嵌入虚拟环境用的,根本不是用来配置环境变量的地方。给你分享几个实用的解决办法:
利用激活脚本的自定义扩展文件
这是最贴合UV虚拟环境激活流程的方法:- Windows系统:在
.venv/Scripts目录下创建activate.bat.local(CMD用)或activate.ps1.local(PowerShell用)文件,把环境变量写进去。比如CMD里写set MY_PROJECT_VAR=my_custom_value,PowerShell里写$env:MY_PROJECT_VAR = "my_custom_value"。 - Linux/macOS系统:在
.venv/bin目录下创建activate.local文件,添加export MY_PROJECT_VAR=my_custom_value。
每次激活虚拟环境时,这些.local文件里的配置会自动被加载,环境变量就生效了。
- Windows系统:在
临时会话级设置(单次生效)
如果只是临时用一下某个环境变量,激活虚拟环境后直接在终端里输入命令就行:- Windows:
set MY_TEMP_VAR=临时值 - Linux/macOS:
export MY_TEMP_VAR=临时值
不过这种方式只在当前终端会话有效,关闭终端后变量就消失了。
- Windows:
项目级.env文件(代码层面加载)
要是想让环境变量和项目绑定,不管激活状态都能生效,可以在项目根目录创建.env文件,把变量按键值对写进去:DB_CONN=localhost:5432 API_SECRET=xxx_12345然后用
uv add python-dotenv安装依赖,在Python代码开头添加加载逻辑:import os from dotenv import load_dotenv load_dotenv() # 加载.env文件里的变量 db_conn = os.getenv("DB_CONN")这样不管是在虚拟环境里运行代码,还是用其他方式执行,都能读取到这些环境变量。
备注:内容来源于stack exchange,提问作者Michael Xia




