Skip to main content

dotenvx和语言SDK集成,让.env加密特性使用更简单

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

在做Dotenvx JetBrains IDE插件时,遇到一个Python和Dotenvx集成的问题,其实JetBrains IDE是支持该扩展的, 但是该API是内部的,并没有公开,导致插件兼容性的问题,所以审核比较麻烦,该特性一直都没有上线。

但是大家不用担心,还有一个简单的方式,就是通过调整Python SDK的命令行方式来集成Dotenvx。 假设你使用uv管理Python项目,你使用Python 3.13.7最新版本,uv会创建对应的virtualenv环境, 对应的python解析器为.venv/bin/python,该命令行其实是软连接到具体的Python版本目录下的。

现在我们需要一个wrapper脚本来替换virtualenv下的python命令行,我们只需要删除.venv/bin/python, 然后创建一个新的python执行脚本,注意执行chmod u+x .venv/bin/python,内容如下:

#!/bin/bash

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

接下来我们就可以像平常一样执行python demo.py,当然PyCharm、VS Code等IDE也可以正常工作,包括Debug等功能都不受影响。

借助同样的方式,你可以为lua, php, perl等语言创建对应的wrapper脚本,如luaw, phpw, perlw等, 这样在执行具体的语言的命令行解析器时,就会先调用dotenvx加载.env文件,然后再执行具体的语言命令。 在产品部署环境中,你也可以创建对应的wrapper脚本,然后使用wrapper脚本启动应用程序。

如果你使用Docker的话,就更方便啦,在镜像打包的时候,直接copy对应的wrapper脚本镜像中,然后使用wrapper脚本启动应用程序。