pyenv install 3.13.7提示"ModuleNotFoundError: No module named '_lzma'"
日志
env
- macbook pro 2019 intel os: Monterey
- pyenv
gaga@GaGa ~ % pyenv install 3.13.7
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.13.7.tar.xz...
-> https://www.python.org/ftp/python/3.13.7/Python-3.13.7.tar.xz
Installing Python-3.13.7...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Traceback (most recent call last):
File "<string>", line 1, in <module>
import lzma
File "/Users/gaga/.pyenv/versions/3.13.7/lib/python3.13/lzma.py", line 27, in <module>
from _lzma import *
ModuleNotFoundError: No module named '_lzma'
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
Installed Python-3.13.7 to /Users/gaga/.pyenv/versions/3.13.7
源码编译py3.13.7
错误是 macOS 编译 Python 时缺少 xz(即 LZMA 库) 导致的常见问题。你安装的 Python 3.13.7 已经完成,但缺少 _lzma 扩展模块,因此功能不完整(比如无法解压 .xz 文件)。
问题原因
_lzma 模块依赖 liblzma(来自 xz 包),在 macOS 上不是默认提供的。pyenv 编译 Python 时如果找不到 liblzma,就会跳过这个扩展。
解决办法
1.安装缺失的依赖
先安装(或重新安装) Homebrew 的 xz 库:
1 | brew install xz |
可以确认路径:
1 | brew --prefix xz |
输出示例:
/opt/homebrew/opt/xz
2.设置编译环境变量
在重新安装 Python 前,告诉编译器如何找到 xz:
Intel 芯片:
1 | export LDFLAGS="-L/usr/local/opt/xz/lib" |
Apple Silicon (M1/M2/M3):
1 | export LDFLAGS="-L/opt/homebrew/opt/xz/lib" |
3.重新安装 Python
1 | pyenv uninstall 3.13.7 |
⚠️ 注意:必须重新安装,否则
_lzma不会重新编译。
4.验证修复
安装完成后,检查是否成功编译 _lzma:
1 | python -c "import lzma; print('LZMA OK')" |
如果输出:
LZMA OK
表示已修复。
5. 永久修复方案
如果你经常使用 pyenv,可在 ~/.zshrc 或 ~/.bash_profile 中加上:
1 | export LDFLAGS="-L$(brew --prefix xz)/lib" |
这样以后安装新版本 Python 不会再缺 _lzma。