Docker构建失败:tokenizers 0.10.3编译报错(cargo rustc错误码101)
解决tokenizers 0.10.3在Rust 1.66.1下编译失败的问题
问题分析
tokenizers 0.10.3的底层Rust代码存在将&T强制转换为&mut T的操作,这属于Rust规范中的未定义行为。近期工具链检测逻辑的严格化(或依赖源的隐性变更)触发了该问题,导致cargo rustc编译失败,无法生成wheel文件。
可行解决方案
1. 用预编译wheel跳过源码编译
直接安装预编译的二进制包,避免从Rust源码编译:
- 修改
pyproject.toml中的tokenizers依赖配置,强制使用预编译版本:tokenizers = { version = "0.10.3", platform = "linux_x86_64", prefer-binary = true } - 或者在
poetry install前,先通过pip安装预编译wheel:pip install tokenizers==0.10.3 --only-binary :all: poetry install --with main,dev
2. 确保Docker中Rust版本严格锁定为1.66.1
检查Dockerfile的Rust安装命令,防止自动升级到更高版本:
- 正确的安装命令示例:
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.66.1 ENV PATH="/root/.cargo/bin:${PATH}" - 安装后验证版本:
rustc --version # 预期输出:rustc 1.66.1 (90743e729 2023-01-10)
3. 升级tokenizers到兼容新版本
tokenizers 0.10.x版本较旧,后续版本已修复此类编译问题。尝试升级到与transformers 4.8.2兼容的版本:
- 修改
pyproject.toml中的依赖:tokenizers = ">=0.13.0,<0.14.0" - 更新依赖锁文件并重新安装:
注:transformers 4.8.2与tokenizers 0.13.x版本兼容性良好,无需修改transformers版本poetry lock --no-update poetry install --with main,dev
内容的提问来源于stack exchange,提问作者sylvinho81
相关产品推荐
相关产品推荐

