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

使用--manifest-path编译Rust工作区致相对文件路径失效

解决Rust服务器配置文件路径问题

问题根源

你用相对路径./vrp-api/config/config.telemetry.json引用配置文件,开发时在仓库根目录执行cargo run,此时当前工作目录就是仓库根,相对路径能正确指向文件。但通过Python用--manifest-path启动时,当前工作目录是Python进程的工作目录,不是Rust项目的根目录,导致相对路径失效。

可行解决方案

方案1:编译时注入包目录路径(推荐)

Rust提供env!("CARGO_MANIFEST_DIR")宏,编译时会自动替换为当前包(vrp-api)的绝对路径。修改main.rs里的路径定义:

const BASE_CONFIG_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/config/config.telemetry.json");

这样不管从哪个目录启动二进制,路径都是编译时确定的绝对路径,完全避免相对路径问题。

方案2:启动时指定工作目录

在Python调用cargo run时,通过cwd参数将工作目录设置为Rust仓库的根目录(也就是克隆后的{self.base}/rust),和开发时的运行环境保持一致:

subprocess.call(
    [
        "cargo",
        "run",
        "--bin",
        "vrp-api",
        "--manifest-path",
        f"{self.base}/rust/vrp-api/Cargo.toml"
    ],
    cwd=f"{self.base}/rust"
)

这种方式不需要修改Rust代码,直接让相对路径基于正确的工作目录解析。

方案3:将配置文件嵌入二进制

如果不想依赖外部文件,可以用Rust的include_str!宏把配置文件内容直接嵌入二进制:

const BASE_CONFIG: &str = include_str!("../config/config.telemetry.json");

也可以用rust-embed crate批量嵌入静态资源,适合需要多个配置文件的场景。

为什么之前的方法无效

你尝试的--remap-path-prefix是用来修改编译产物中记录的文件路径(比如调试信息里的路径),和运行时的相对路径解析完全无关,所以无法解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:31:13