Skip to main content

Python语言集成dotenvx

dotenvx-py还没有提交到PyPI(还在开发中),如果你使用uv的话,还是非常简单的。

在Python项目中使用dotenvx也非常简单,这里假设你已经使用uv创建了项目, 你只需要添加dotenvx-py包即可,如下

$ uv add "dotenvx-py @ https://github.com/linux-china/dotenvx-py.git"

接下来只需要在代码调用load_dotenvx()即可。

import os
from dotenvx_py import load_dotenv

load_dotenv() # take environment variables from .env.

print(os.getenv("HELLO"))

Tips: dotenvx-py使用python-dotenv兼容的API,所以你只要调整一下import语句即可, 如from dotenv import load_dotenvfrom dotenvx_py import load_dotenv

Dotenvx和Python虚拟环境集成

如果你不想在项目中增加dotenvx-py包,还有一种就是通过虚拟环境集成。 现在不少项目都使用uv来管理Python项目,uv会创建一个虚拟环境,所有的包和Python版本都在该虚拟环境中, 当然虚拟环境的python解析器实际上是一个软连接,指向具体的Python版本目录下的解析器。

现在你只需要执行dotenvx link .venv/bin/python,就会替换之前的软连接,创建一个wrapper脚本, 然后由该脚本负责加载.env文件,然后再调用具体的Python解析器,这样就完成了集成。

#!/bin/bash

# load .env by dotenvx
eval $( dotenvx decrypt --stdout --format shell )
# Execute python3 command with arguments
$HOME/.local/share/uv/python/cpython-3.13.7-macos-x86_64-none/bin/python3.13 "$@"

该脚本和之前的软连接功能是一样的,你可以直接将该脚本理解为软连接即可,执行python demo.py,和IDE集成等,完全没有任何问题。

这种Python 解析器内置.env集成的方式,Node.js、Bun等都内置啦,当然Python社区级的uv,其uv run命令也内置了--env-file参数, 这样就可以省去了dotenv package集成,更加方便。

说明

有同学可能问会,还有一个python-dotenvx项目,为何不使用它? 主要是python-dotenvx是基于命令行来实现对应的功能,你需要安装对应的命令行,而命令行也比较大。 你可以查看python-dotenvx, 而dotenvx-py则是直接使用Python代码实现的,主要是为了减少依赖和命令行的复杂性。