rust cargo注册表中的构建脚本更改似乎没有影响,那么如何修复构建脚本?

wbrvyc0a  于 2023-05-07  发布在  Go
关注(0)|答案(1)|浏览(144)

我通过cargo.toml文件将tensorflow添加到我的rust项目中,看起来像这样:

#...
[dependencies]
tensorflow = { version = "0.20.0", features = ["tensorflow_gpu"] }

当省略"tensorflow_gpu"特性时,项目的构建和运行都没有问题。但是当使用"tensorflow_gpu"功能构建时,它会崩溃并出现错误:

--- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidArchive("Could not find central directory end")', E:\rust\cargo\registry\src\github.com-1ecc6299db9ec823\tensorflow-sys-0.23.0\build.rs:154:45

我发现错误似乎是在构建脚本中,错误的"libtensorflow-gpu-windows-x86_64-2.11.0.zip"下载了。
构建脚本输出指出,它试图下载"binary_url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-2.11.0.zip",但经过一番研究,我发现Windows上最后一个稳定的tensorflow GPU版本是2.10.0,因此无法下载2.11.0,从而导致unzip调用崩溃,因为该zip不存在。
搜索tensorflow-sys-0.23.0build.rs文件,我发现VERSION常量的计算结果为"2.11.0"和格式表达式:

let binary_url = format!(
    "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-{}-{}-{}-{}{}",
    proc_type,
    os,
    target_arch(),
    VERSION,
    ext
    );

生成二进制URL。
我尝试将VERSION常量更改为"2.10.0",并将格式表达式更改为

let binary_url = format!(
    "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-{}-{}-{}-2.10.0{}",
    proc_type,
    os,
    target_arch(),
    ext
    );

如果proc_type是"gpu"。但是构建脚本仍然记录了错误的binary_url,版本号为"2.11.0",所以我对www.example.com文件所做的更改build.rs似乎没有效果。我想依靠旧版本的tensorflow应该可以解决这个问题,但是我不能使用现代的tensorlfow功能,我也不想尝试它们,所以这应该是我最后的选择。那我能做什么呢

1zmg4dgp

1zmg4dgp1#

不要更改代码let binary_url = format!(...,而是尝试更改build.rs:

const VERSION: &str = "2.10.0";
const TAG: &str = "v2.10.0";

如果build.rs你只是运行cargo build,www.example.com将不会重新编译,而是运行cargo clean -p tensorflow-sys然后编译。对我很有效。
另外,我在Github中看到了一个问题:https://github.com/tensorflow/rust/issues/400

相关问题