编译Python版Polars遇编译错误,求适配Rust版本及解决方案
编译Python版Polars 0.18.15时的Rust版本问题与修复方案
问题描述
使用的命令
python -m pip install --no-binary :all: maturin python -m pip install --no-binary :all: Polars==0.18.15
当前Rust版本
C:\Users\ashish.shirodkar>rustc --version rustc 1.74.0-nightly (58eefc33a 2023-08-24)
错误信息
Compiling pyo3-built v0.4.7 Compiling lz4 v1.24.0 Compiling zstd v0.12.4 Compiling parquet2 v0.17.2 Compiling polars-error v0.32.0 (C:\Users\ashish.shirodkar\AppData\Local\Temp\pip-install-cor5irss\polars_180ec2d9ea9044ce86687698c1427599\local_dependencies\polars-error) Compiling polars-row v0.32.0 (C:\Users\ashish.shirodkar\AppData\Local\Temp\pip-install-cor5irss\polars_180ec2d9ea9044ce86687698c1427599\local_dependencies\polars-row) error: assigning to `&T` is undefined behavior, consider using an `UnsafeCell` --> local_dependencies\polars-core\src\chunked_array\ops\rolling_window.rs:120:29 | 96 | let ptr = array_ptr.as_ref() as *const dyn Array as *mut dyn Array | _______________________- 97 | | as *mut PrimitiveArray<T::Native>; | |_________________________________________________- 转换发生在此处 ... 120 | *ptr = arr_window; | ^^^^^^^^^^^^^^^^^ | = note: `#[deny(invalid_reference_casting)]` on by default
注:用户已尝试使用旧版Rust但未解决问题。
解决方案
推荐的Rust版本
使用Rust 1.73.0稳定版,Polars 0.18.15的代码完全兼容这个版本。
原因:Rust 1.74-nightly新增了invalid_reference_casting的强制禁用检查,而Polars 0.18.15的代码中的指针转换逻辑触发了这个新检查导致编译失败。Rust 1.73及以下的稳定版本没有启用这个严格检查,能正常完成编译。
其他可行修复办法
临时绕过检查编译:
安装Polars时通过环境变量关闭该lint检查,无需更换Rust版本:RUSTFLAGS="--allow invalid_reference_casting" python -m pip install --no-binary :all: Polars==0.18.15此方法仅绕过检查,不修复代码本身的问题,适合必须使用当前Rust版本和Polars 0.18.15的场景。
升级Polars版本:
Polars 0.19.x及以上版本已修复该指针转换问题,直接安装更高版本即可解决:python -m pip install --no-binary :all: Polars>=0.19.0
内容的提问来源于stack exchange,提问作者Ashish Shirodkar
相关产品推荐
相关产品推荐

