如果你在 Windows 上安装 TeX Live 时撞见xz: (stdin): Compressed data is corrupt,紧接着又蹦出一句TLPDB::_install_package: untar failed,恭喜你,踩到了这套发行版在 Windows 上最经典的下载损坏问题。我第一次遇到这组报错时,以为是自己下载的安装包坏了,二话不说删掉重下,结果第二遍、第三遍还是同样的戏码,整个人差点怀疑电脑硬件出了问题。后来才明白,这两个错误根本不是“安装器”坏了,而是下载环节的数据出了问题。这篇内容就把这组报错从原理到操作彻底拆开讲清楚,给你一条从哈希校验、换源、清理残留、离线安装到后续维护的完整解决路径。刚接触 LaTeX 生态的新手、或者经常被大体积软件安装包坑过的开发者,都可以直接照着做。
1. 先把报错看透:这两个提示到底在说什么
1.1 错误信息拆解:哪一行才是关键
xz: (stdin): Compressed data is corrupt里有两个关键信息。xz是一种压缩工具,TeX Live 的软件包在分发时几乎全部采用.tar.xz格式封装,安装器逐个下载回来之后,需要先经过 xz 解压,再用 tar 解开内部文件。而(stdin)指的是数据不是从一个磁盘文件读取的,而是从“标准输入流”里管道传进来的——也就是说,安装器并不是下载一个完整的压缩包落盘,再慢慢解压,而是边下载边把数据流直接喂给 xz 工具。
TLPDB::_install_package: untar failed是紧接着出现的第二句。TLPDB 是 TeX Live 的包数据库对象,_install_package是安装器内部真正把一个软件包写入本地数据库的方法。当 xz 那边解压失败,tar 拿不到完整文件结构,这个内部方法就会抛出untar failed,随后整个安装流程中断。
这两句报错连在一起出现,说明问题链条很清晰:拿到手的压缩数据本身已经损坏。网络上很多教程会让你去删缓存、重置 tlpdb,但如果问题根源是下载数据坏了,这些操作都是治标不治本。要解决它,得从源头重新审视下载环节。
1.2 下载环节最脆弱:为什么安装器会碰上“坏包”
TeX Live 在线安装时,安装器会从你指定的仓库地址请求数千个软件包文件。每个包的大小从几十 KB 到几 MB 不等,全部走 HTTP 或者 HTTPS 传输。Windows 上大多数安装场景下,这些请求会经过本地的网络协议栈、安全软件扫描、甚至某些下载工具的透明接管,只要任何一个环节把数据流改了几个字节,后面的解压环节立刻炸掉。
常见情况有三种。第一种是网络连接不稳定导致下载中断,但客户端没有及时感知到,哭着把半个包当成完整包去解压。第二种是仓库源本身的同步不完整——尤其是某些开源镜像站,在同步 TeX Live 仓库的过程中,如果你刚好赶上镜像在更新某个包,下载到的可能就是一份不完整的文件。第三种是安全软件的实时防护在后台扫描临时目录里的压缩文件,导致写入异常或文件被隔离。
Windows 下还有一个特别容易踩的坑是断点续传机制的表现不太稳定。如果安装器中途卡住,你按了重试,理论上它应该从断点续传,但个别情况下会从某个错误的位置继续写文件,写出来的就是一个逻辑损坏的压缩包。这种包在 xz 解压时不会有任何情面,直接报Compressed data is corrupt。
我之前帮一位朋友调试这个问题时,他的现象特别典型:每次报错指向的包名都不太一样,一会儿是 A 宏包,一会儿是 B 字体包。这说明不是仓库里某个固定文件坏了,而是整条网络链路的稳定性有问题。这种情况下反复重试同一个源,几乎不可能成功。
1.3 判断问题的三个信号
遇到这组报错,先别急着重装。花两分钟做三件事:
第一,确认报错中提到的时间点。如果错误是在安装进行到大约 60% 到 90% 之间突然出现的,基本可以认定是网络或传输层问题,而不是 ISO 镜像文件本身的问题。
第二,观察报错指名的包是否固定。如果每次都是同一个包包名,说明该文件在镜像上的数据本身有问题,换一个仓库源通常能解决。如果每次都不同,大概率是你的网络链路不够稳。
第三,查看安装日志。TeX Live 安装器在工作目录下会保留install-tl.log,里面有详细的下载和解压记录,能够看到具体失败在哪一步。日志比屏幕上的两行报错信息靠谱得多,排查问题时优先翻它。
2. 动手解决第一步:让“下载源”彻底干净
2.1 先算哈希,别信“下载完成”四个字
我对安装大型开源软件的一个执念是:下载完必须做哈希校验,没校验之前绝不动手安装。TeX Live 的完整安装镜像体积在 5GB 到 6GB 左右,这个量级的文件,单靠浏览器、下载工具那句“下载完成”判断完整性,是非常不靠谱的。正常网速下下载 5GB 文件往往要十几分钟到几十分钟,这么长的传输时间里,任何一段网络波动或本地写入异常都可能让文件变成坏档,而工具本身并不会替你察觉。
如果你用的是离线 ISO 镜像安装方案,前往镜像网站下载对应版本的 ISO 文件时,页面一般会同时提供 SHA256 校验值。在 Windows 的 PowerShell 里执行:
Get-FileHash -Algorithm SHA256 .\texlive2025.iso计算出来的 64 位哈希字符串,要和你看到的官方公布值完全一致。一个字符都不能差。如果算出来的结果和公布值对不上,别犹豫,删掉重下。这个动作能过滤掉一大半后续安装报错。
如果你下载的是安装器install-tl.zip,同样可以算一次哈希。这个文件体积不大,几 MB 而已,但一样可能损坏。
2.2 换源的正确姿势:图形界面和命令行两条路
下载源选得对不对,直接决定在线安装能不能熬到最后。国内网络环境下访问某些境外仓库源速度慢、稳定性差,出问题的概率很高。更好的做法是选择距离你近、同步频率又比较高的开源镜像站,比如一些高校维护的镜像站或者国内头部云厂商提供的开源镜像仓库。
用图形界面方式换源:解压安装器后,双击运行install-tl-advanced.bat,在弹出的高级向导界面里找到仓库(Repository)设置项。安装器会给一个默认地址,你把它改成本文所示格式的镜像地址即可。注意如果你是第一次使用,建议先打开浏览器访问这个镜像地址,确认目录结构里能看到tlnet和tlpkg这些子目录,再拿来当仓库源使用。
用命令行方式换源:
install-tl-windows.bat --repository https://mirror.example.invalid/texlive/tlnet/这里要特别提醒:不要从网上随手复制别人贴出的镜像地址。网上许多教程里的地址已经过时,指向的可能是早已停止同步的旧目录。地址一定要自己上镜像站页面确认,以页面标注的实际路径为准。
2.3 顺手排查杀毒软件和系统安全策略
Windows Defender 的实时防护和第三方杀毒软件,是 Windows 上安装 TeX Live 的另一个隐形炸弹。安装过程中,安装器会在临时目录、安装目录之间快速写入大量小文件,安全软件的实时扫描机制一旦介入,轻则拖慢速度,重则把压缩文件误判为恶意软件直接隔离。你看到的现象就是安装到一半,某个包解压失败,然后报出一串莫名其妙的错误。
排查思路很简单:在安装期间临时把 TeX Live 相关的安装目录加入杀毒软件的排除名单,或者暂时关闭实时防护。装完之后再重新开启并做一次全盘扫描。这不是让你长期关闭防护,只是在安装这个特定大型软件期间的临时操作。
另外,如果你用了各种“下载工具”下载安装包,也要注意这些工具的多线程加速逻辑可能会反复改写文件块。下载完成后的哈希校验就是用来发现这类问题的,不要跳过。
提示:如果同一份 ISO 连续两次哈希计算结果都不同,优先怀疑内存故障或磁盘故障,别继续留在下载环节上死磕。
3. 动手解决第二步:清理残留,来一次干净的重装
3.1 卸载和残留清理的标准动作
在线安装失败到一半,你的系统里可能已经残留了半成品 TeX Live 目录。很多人直接删掉安装目录就重装,结果还是报错,就是因为残留数据影响了新安装器的工作。
我建议的清理动作是这样:
- 在“控制面板”的“卸载程序”里找到 TeX Live 卸载项,执行卸载。
- 手动删除
C:\texlive整个目录。如果你的安装目录不是默认路径,就去你当时填写的路径里删除。 - 进入
C:\Users\你的用户名\AppData\Local\texlive和C:\Users\你的用户名\AppData\Roaming\texlive,把带texlive字样的目录删除。 - 在系统环境变量 PATH 里检查并删除残留的 TeX Live 路径条目,例如
C:\texlive\2025\bin\windows。 - 重启电脑,再开始新的安装。
第 4 步很容易被忽略。PATH 里残留的路径指针指向的目录已经不存在了,虽然它本身不一定会引发压缩数据损坏报错,但会让安装完成后的命令环境乱七八糟,所以一并清掉最好。
重启之后建议不要立刻重试在线安装,而是切换到下一步要讲的离线安装方案。因为前面已经证明了你当前的网络链路不够稳定,再用同样的方式赌一次,只是把同样的错误再体验一遍。
3.2 推荐“离线安装”:ISO 镜像才是最稳的方案
在线安装的问题在于“边下边装”这个动作本身太脆弱。数千个小文件、数千次 HTTP 请求,任何一个请求出问题都会让整个安装前功尽弃。离线安装则完全不同:先通过下载工具或浏览器从镜像站把完整 ISO 文件拿到本地,校验哈希,挂载或解压后让安装器直接读取本地文件,彻底绕开网络波动。
操作步骤:
- 从镜像站下载完整 ISO 安装镜像。
- 校验 SHA256 哈希,确认无误。
- 双击 ISO 文件在资源管理器中挂载,或者用解压软件解压到一个纯英文路径,比如
C:\texlive-iso。 - 以管理员身份运行安装器
install-tl-windows.bat。 - 在高级设置里把仓库指定为本地路径,例如
C:\texlive-iso。
这样安装时,安装器直接从本地磁盘读取压缩包再解压,速度完全取决于你的磁盘读取速度,远比网络传输稳定。我实测下来,一个完整的 TeX Live 安装在本地源模式下通常十几分钟到半个小时就能完成,而且几乎不会再出现xz: (stdin): Compressed data is corrupt这种传输层报错。
离线安装唯一的代价是下载时间较长,但一次下载无限次使用,对于以后要在多台电脑上装 TeX Live 的人,这个成本非常划算。
3.3 安装参数的取舍:方案、目录、环境变量
新版 TeX Live 安装器比较高阶,但我不建议新手全盘套用默认设置直接“全部安装”。安装方案(scheme)里,scheme-full会拉下大量宏包和字体文件,体积膨胀得非常厉害。对大部分科研写作者来说,scheme-basic或者scheme-small已经足够日常编译使用,缺的宏包后续可以用tlmgr install 宏包名按需补充。
安装目录方面,Windows 下默认路径一般是C:\texlive\2025,这个路径本身没有中文和空格,可以放心使用。如果你非要改到别的盘,也要保证路径纯英文且没有空格,否则后续某些工具处理路径时会出奇奇怪怪的问题。
环境变量设置方面,安装向导中有一个path选项,勾选后安装器会自动把 TeX Live 的 bin 目录写进系统 PATH。建议勾选,省得装完之后手动配。如果忘了勾选也没关系,后面用 tlmgr 重新配置或者手动添加环境变量都可以。
4. 进阶操作:配合官方仓库镜像的安装配置
4.1 镜像站安装器的两种用法
很多开源镜像站在提供 TeX Live 镜像时,会同时提供两种资源:一种是体积较小的install-tl.zip安装引导器,另一种就是完整 ISO。它们的用途不一样。
install-tl.zip体积只有几 MB,下载速度快。它的工作方式是:安装器本身从你指定的仓库地址在线拉取宏包,安装过程中会动态请求网络数据。当你网络质量不佳时,我前面提到的一大堆问题就都会冒出来。所以这个安装器更适合网络环境稳定、或已经确定了一个可用仓库源的情况。
完整 ISO 则适合网络状况不太理想、或者想一次下载反复使用的场景。如果你人在局域网环境、公共 WiFi 或者校园网里,我会直接建议放弃在线安装路径,直接抓 ISO 走本地源。
正确用法是:先在镜像站页面看清楚目录结构,找到install-tl.zip或install-tl-windows.zip的下载链接,下完解压,再运行里面的批处理文件。镜像站页面上的目录结构通常是一目了然的,只要你能看到tlnet目录,就说明该镜像在同步中。
4.2 用配置文件实现“无人值守”安装
如果你需要在多台电脑上装 TeX Live,或者不想在图形界面里手动点一堆选项,可以准备一个texlive.profile配置文件,让安装器读取这个文件完成自动安装。
一个参考配置如下:
selected_scheme scheme-basic TEXDIR C:\texlive\2025 TEXMFLOCAL C:\texlive\texmf-local TEXMFSYSCONFIG C:\texlive\2025\texmf-config TEXMFSYSVAR C:\texlive\2025\texmf-var TEXMFSYSCACHE C:\texlive\2025\texmf-var TEXMFHOME C:\Users\yourname\texmf option_doc no option_src no option_fmt 1 option_letter 1 option_path 1 option_desktop_integration 1 option_file_assocs 1 option_tlpdb 0保存为texlive.profile后,在安装器所在目录打开命令行执行:
install-tl-windows.bat --profile texlive.profile安装器会按照文件里的配置静默安装。option_doc no和option_src no比较关键,它们会让安装器跳过文档和源码包,能大幅缩减安装体积和时间。如果你需要离线查手册,可以改成option_doc yes。
有一点要提醒你,配置文件里的路径如果带有中文或者空格,容易出问题,所以尽量保持纯英文的绝对路径。这个配置 I 试过在几台机器上重复使用,效果很稳。
4.3 安装完成后的第一件事:更新包管理器
安装成功之后,第一件事不是急着写论文,而是把 tlmgr 的仓库源也指到国内镜像站对应的 tlnet 地址,然后做一次自更新。
tlmgr option repository https://mirror.example.invalid/texlive/tlnet/ tlmgr update --selftlmgr是 TeX Live 的包管理工具,你之后装任何宏包都要靠它。如果不先把仓库源切到稳定镜像,你之后运行tlmgr install 某个宏包时,又会出现和安装时一模一样的下载损坏问题。先更新 tlmgr 自身,再按需安装宏包,这样能避免一次拉取大量数据导致新的网络风险。
日常使用中,当你需要某个宏包但编译报错提示找不到时,用tlmgr install 宏包名单独安装就好,完全不需要去重装整个 TeX Live。
5. 常见问题与排查技巧实录
5.1 错误变体对照速查表
我整理了一张速查表,涵盖了安装和后续使用中可能碰到的同类报错,方便你直接对照排查。
| 报错片段 | 直接原因 | 优先解法 |
|---|---|---|
xz: (stdin): Compressed data is corrupt | 下载的压缩数据损坏 | 校验哈希、换源或改用离线 ISO |
TLPDB::_install_package: untar failed | 安装器无法解开损坏的包 | 同上,清理残留后重装 |
checksum mismatch | 下载过程中数据被改写或镜像同步异常 | 重下、换镜像源、关闭安全软件后重试 |
could not load tlpdb | 仓库地址无法访问或目录结构不符 | 打开浏览器确认镜像地址有效 |
invalid or corrupted package | 具体某个宏包的文件损坏 | 先看是否固定包名,是则换源 |
No such file or directory | 路径包含中文或空格 | 安装目录全部改用纯英文路径 |
| 安装卡在 99% 不动 | 最后一个宏包下载缓慢或网络中断 | 等待或 Ctrl+C 后用本地源重试 |
这张表里的报错,绝大多数归根结底都是同一件事:数据流在传输过程中出了问题。所以排查的时候不要被花式报错带偏,回到“数据完整性”这个原点去解决。
5.2 三次典型的踩坑复盘
第一次踩坑是我自己下载 ISO 时偷懒,用了一个下载工具去拉文件。工具显示下载完成,我连哈希都没算就开始安装,结果解压到一半直接报xz: (stdin): Compressed data is corrupt。重下太浪费时间,我就想着“跳过这个坏包继续装”,结果越装越乱,最后只能全部删干净重来。从那以后,ISO 下载完没算哈希之前,我绝不会双击任何安装文件。
第二次是帮一个朋友排查,他在宿舍的网络环境里反复在线安装,每次报错包名都不固定。我建议他改成国内镜像站,他换了几个源还是报错,最后发现是电脑上装的安全软件把安装器临时目录里的压缩包当成了威胁对象,动不动就隔离文件。关闭实时防护后,同一个源一次就装完了。
第三次是一台安装目录路径里带了中文符号的机器,安装过程经常在某个位置报No such file or directory,和压缩损坏报错混在一起,非常迷惑。后来把路径全部改成纯英文目录,所有问题消失。Windows 下很多开源软件的路径兼容性就是这么敏感,别跟版本较劲。
5.3 验证安装环境的小测试
确认 TeX Live 真的装好了,打开命令提示符或者 PowerShell,依次执行:
xelatex --version kpsewhich --version tlmgr --version三条命令都有正常输出版本信息,说明基础环境没有问题。接着做一个更实际的测试:新建一个文件test.tex,写入一个最小文档。
\documentclass{article} \begin{document} Hello, TeX Live! \end{document}在命令行执行:
xelatex test.tex如果编译顺利生成 PDF 文件,整套环境基本就稳了。之后如果某个文档编译时提示缺宏包,用tlmgr install 宏包名单独补装,不要再走一遍全量安装。
最后再分享一个我自己的习惯。现在只要是体积超过 1GB 的安装包,我第一步永远是先复制官方哈希值到记事本,下载完成后用Get-FileHash算一遍,确认无误才动手安装。这个习惯让我近几年几乎没有再被Compressed data is corrupt这类问题坑过。如果你在 Windows 上安装 TeX Live 也遇到同样的报错,别在一个不稳定的在线源上反复重试,直接把目标切换到离线 ISO 加镜像仓库的方案,一次装成的概率会高得多。