🔍 背景与痛点
最近在为 Ubuntu 26.04 LTS Server 部署微软开源的文档转 Markdown 利器 MarkItDown 。由于现代 Ubuntu 系统严格执行了 PEP 668 规范,直接使用 sudo pip install 会触发 externally-managed-environment 错误。
为了既不破坏系统全局环境,又不想繁琐地频繁激活传统的 python3-venv 虚拟环境,我决定采用目前业界极其火爆的 Rust 编写的 Python 包和环境管理器 uv。
然而,在安装过程中由于 Astral 官方首页改版 (Astral 已正式加入 OpenAI Codex 团队),直接使用旧版文档的 curl -LsSf https://astral.sh | sh 竟然直接抓取到了 HTML 网页,导致报出语法错误 Syntax error: redirection unexpected。
通过摸索,我成功踩坑并实现了零虚拟环境、一行命令全局 root 安装。以下是完整的踩坑与实战记录。
🛠️ 第一步:正确安装 uv(避开官网改版坑)
由于官网首页变成了新闻与视觉页面,我们需要精确指定其最新的独立安装脚本路径 uv/install.sh。
在 root 权限下执行:
bash
arduino
curl -LsSf https://astral.sh/uv/install.sh | bash
请谨慎使用此类代码。
终端输出反馈:
text
vbnet
downloading uv 0.12.19 x86_64-unknown-linux-gnu
installing to /root/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
请谨慎使用此类代码。
⚠️ 第二步:解决 command not found: uv 环境变量问题
由于安装完后没有刷新 Shell,直接运行 uv tool install 会引发报错:
bash
bash
➜ ~ uv tool install "markitdown[all]"
zsh: command not found: uv
请谨慎使用此类代码。
解决方案:
因为我的服务器使用的是 zsh,所以需要直接重新加载配置(如果是 bash 请执行 source ~/.bashrc),或者直接按照提示执行 source $HOME/.local/bin/env。
bash
bash
source ~/.zshrc
请谨慎使用此类代码。
📥 第三步:使用 uv 优雅全局安装 markitdown
uv 拥有一套类似于 pipx 的工具管理机制:uv tool install。它会在后台自动为你创建一个隔离的极简运行环境,并自动把最终的可执行二进制命令暴露到系统的全局路径中。
这意味着:你不需要手动创建、激活任何虚拟环境,就能拥有完美的全局 markitdown 命令,且绝不污染 root 系统的原生 Python 环境!
执行安装(这里带上 [all] 扩展以支持 PDF、Office、音频等全格式转换):
bash
arduino
uv tool install "markitdown[all]"
请谨慎使用此类代码。
uv 的高并发 Rust 引擎展现了恐怖的速度,仅用不到 30 秒 就完美并行处理了包含 numpy、pandas、onnxruntime、beautifulsoup4 在内的 52 个复杂重型依赖包!
终端关键输出:
text
ini
Resolved 52 packages in 6.43s
Prepared 52 packages in 21.48s
Installed 52 packages in 411ms
...
+ markitdown==0.1.8
...
Installed 1 executable: markitdown
请谨慎使用此类代码。
🚀 第四步:最终验证
直接在 root 用户的任意路径下输入验证命令:
bash
bash
markitdown --help
请谨慎使用此类代码。
完美输出帮助菜单:
text
vbnet
usage: SYNTAX:
markitdown <OPTIONAL: FILENAME>
If FILENAME is empty, markitdown reads from stdin.
EXAMPLE:
markitdown example.pdf
OR
markitdown example.pdf -o example.md
Convert various file formats to markdown.
...
请谨慎使用此类代码。
💡 总结与心得
- 别再用
--break-system-packages了 :在 root 下强行用pip破坏系统包极其危险,未来系统升级极易崩盘。 uv tool是完美的替代品 :不仅彻底免去了手动source activate虚拟环境的痛苦,还拥有原生全局命令的体验。- 效率狂飙 :52 个重型数据处理包的解析、下载和安装,在
uv手里总共只花了不到半分钟,Rust 写的工具确实是现代服务器的效率神兵。
从此,在 Ubuntu 26.04 服务器上,直接一行 markitdown input.pdf -o output.md 即可轻松将各种杂乱的文档化为干净的 Markdown,完美对接下游的 LLM 或知识库流水线!
标签:#Ubuntu26.04 #Python #uv #MarkItDown #开源工具 #Linux运维