You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Rust Release二进制文件正确读取.env环境变量?

解决Rust二进制文件无法读取.env的问题

问题根源

在Mac上用open命令启动二进制文件时,程序的工作目录并非二进制文件所在目录,而是当前用户的Home目录(~/)。dotenv::dotenv()默认会在工作目录下查找.env文件,所以即便你把.env复制到二进制同目录,程序也无法定位到它。而cargo run会自动将工作目录设为项目根目录,因此能正常加载.env。

解决方案

1. 终端直接运行二进制(最简单方案)

打开终端,切换到二进制文件所在目录:

cd /path/to/your/project/target/release

直接执行二进制文件:

./your-binary-name

此时程序工作目录与二进制文件一致,可正常读取同目录下的.env。

2. 用脚本指定工作目录启动(适配图形化启动场景)

如果需要通过图形化方式启动,可借助osascript命令让终端在正确目录下启动程序:

osascript -e 'tell application "Terminal" to do script "cd /path/to/your/project/target/release && ./your-binary-name"'

该命令会打开新终端窗口,自动切换到二进制目录并启动程序,确保工作目录正确。

3. 修改代码强制加载二进制目录下的.env(通用方案)

修改Rust代码,让程序主动获取自身所在目录,加载该目录下的.env,无论从何种方式启动都能定位到文件:

use dotenv;
use std::env;
use std::path::PathBuf;

fn main() {
    // 获取二进制文件的绝对路径
    let exe_path = env::current_exe().expect("无法获取可执行文件路径");
    // 提取二进制所在目录
    let exe_dir = exe_path.parent().expect("无法获取可执行文件所在目录");
    // 拼接.env文件路径
    let env_file_path = exe_dir.join(".env");

    // 加载指定路径的.env文件
    if let Err(e) = dotenv::from_path(env_file_path) {
        eprintln!("加载.env文件失败: {}", e);
    }

    // 后续业务逻辑...
}

修改后重新执行cargo build --release构建,此时无论用open还是其他方式启动,程序都能正确读取.env。

内容的提问来源于stack exchange,提问作者Antonin GAVREL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:42:47