
在使用 pip install tokenizers==0.12.1 命令尝试安装 tokenizers 包时,用户可能会遇到编译错误,尤其是在使用 python 3.6.15 和 rust 1.72.0 或更高版本时。这类错误通常表现为 rust 编译器的警告和错误信息,例如关于可变变量(mutable)的警告和更关键的“将 &t 转换为 &mut t 是未定义行为”的类型转换错误。
warning: variable does not need to be mutable
--> tokenizers-lib\src\models\unigram\model.rs:265:21
|
265 | let mut target_node = &mut best_path_ends_at[key_pos];
| ----^^^^^^^^^^^
| |
| help: remove this `mut`
...
error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
--> tokenizers-lib\src\models\bpe\trainer.rs:526:47
|
522 | let w = &words[*i] as *const _ as *mut _;
| -------------------------------- casting happened here
...
526 | let word: &mut Word = &mut (*w);
| ^^^^^^^^^
|
= note: for more information, visit <https://doc.rust-lang.org/book/ch15-05-interior-mutability.html>
= note: `#[deny(invalid_reference_casting)]` on by default
warning: `tokenizers` (lib) generated 3 warnings
error: could not compile `tokenizers` (lib) due to the previous error; 3 warnings emitted 这些错误的核心原因是 Rust 编译器在 1.73.0 版本左右变得更加严格,对某些不安全或潜在未定义行为的类型转换进行了限制。旧版本的 tokenizers 代码中存在此类转换,导致在新版 Rust 编译器下无法通过编译。tokenizers 官方已在 0.14.1 及更高版本中修复了这些兼容性问题。
解决方案一:升级 tokenizers 及其相关依赖最推荐的解决方案是升级 tokenizers 包到兼容新版 Rust 编译器的版本。然而,这通常会带来依赖链上的变化,特别是对于依赖 tokenizers 的其他库,例如 transformers。
-
升级 tokenizers 版本: 将 tokenizers 升级到 0.14.1 或更高版本,这些版本已经修复了与新版 Rust 编译器的兼容性问题。
pip install tokenizers>=0.14.1
-
同步升级 transformers 版本: 如果你的项目依赖于 transformers 库,并且它要求旧版 tokenizers(例如 transformers==4.19.1 可能要求 tokenizers<0.13),那么仅升级 tokenizers 会导致依赖冲突。在这种情况下,你需要同时升级 transformers 到一个兼容新版 tokenizers 的版本。例如,transformers>=4.36 通常与 tokenizers>=0.14.1 兼容。
pip install transformers>=4.36 tokenizers>=0.14.1
-
修改 requirements.txt 文件: 如果你的项目使用 requirements.txt 文件管理依赖,你需要修改文件中对应的行:
- tokenizers==0.12.1 - transformers==4.19.1 + tokenizers>=0.14.1 + transformers>=4.36
然后重新安装依赖:
pip install -r requirements.txt
注意事项:
- 在升级核心依赖库时,务必进行充分的测试,以确保项目的功能不受影响。某些旧项目可能与新版本的库不完全兼容。
- 如果你的项目强制要求使用特定旧版本的 tokenizers,并且无法升级,那么可能需要考虑第二种解决方案。
如果项目对 tokenizers 的版本有严格限制,无法升级,你可以通过强制使用一个较旧的、对代码检查不那么严格的 Rust 编译器版本来绕过这个问题。这可以通过设置 RUSTUP_TOOLCHAIN 环境变量来实现。
确认兼容的 Rust 版本: 根据 tokenizers 官方社区的讨论,Rust 1.72.1 或更早版本可能不会出现此编译错误。你可以尝试使用这些版本。
-
安装特定 Rust 工具链: 如果你还没有安装 rustup,请先安装它。然后使用 rustup 安装一个旧版工具链。例如,安装 1.72.1 版本:
rustup install 1.72.1
-
设置 RUSTUP_TOOLCHAIN 环境变量: 在执行 pip install 命令之前,将 RUSTUP_TOOLCHAIN 环境变量设置为你希望使用的旧版 Rust 工具链。
-
Linux/macOS:
Post AI
博客文章AI生成器
50
查看详情
export RUSTUP_TOOLCHAIN=1.72.1 pip install tokenizers==0.12.1 unset RUSTUP_TOOLCHAIN # 安装完成后可以取消设置
-
Windows (Command Prompt):
set RUSTUP_TOOLCHAIN=1.72.1 pip install tokenizers==0.12.1 set RUSTUP_TOOLCHAIN= # 安装完成后可以取消设置
-
Windows (PowerShell):
$env:RUSTUP_TOOLCHAIN="1.72.1" pip install tokenizers==0.12.1 Remove-Item Env:\RUSTUP_TOOLCHAIN # 安装完成后可以取消设置
-
注意事项:
- 这种方法是临时的解决方案,不推荐作为长期策略。因为它依赖于一个过时的 Rust 工具链,可能无法获得最新的性能优化、安全补丁或语言特性。
- 每次需要编译依赖 Rust 的旧版 Python 包时,都可能需要重复设置此环境变量。
- 确保你安装的旧版 Rust 工具链与你的系统兼容。
当遇到 tokenizers 包因 Rust 编译器兼容性问题而安装失败时,首选且最稳健的解决方案是升级 tokenizers 及其相关的 Python 依赖(如 transformers)到最新且兼容的版本。如果项目存在严格的版本限制,无法升级 tokenizers,则可以考虑临时性地通过设置 RUSTUP_TOOLCHAIN 环境变量来使用一个旧版的 Rust 编译器进行编译。无论采用哪种方法,都应在生产环境部署前进行充分的测试,以确保项目的稳定性和功能完整性。
以上就是解决 tokenizers==0.12.1 安装与 Rust 兼容性问题的教程的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: linux word python html node windows app 工具 mac ai macos 环境变量 Python rust pip mutable 类型转换 windows macos linux 性能优化 prompt 大家都在看: 运行Python脚本怎样在Linux命令行启动脚本 运行Python脚本的Linux基础执行方法 查看Python版本如何在Linux终端快速查询 查看Python版本的Linux基础教程 查看Python版本如何在Linux源码安装中查看 查看Python版本的源码安装查询教程 查看Python版本怎样在Linux终端用完整命令查询 查看Python版本的完整命令使用技巧 查看Python版本怎样在Linux软件包中查看 查看Python版本的包管理查询方法






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。