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
2
export LDFLAGS="-L/usr/local/opt/xz/lib"
export CPPFLAGS="-I/usr/local/opt/xz/include"

Apple Silicon (M1/M2/M3):

1
2
export LDFLAGS="-L/opt/homebrew/opt/xz/lib"
export CPPFLAGS="-I/opt/homebrew/opt/xz/include"

3.重新安装 Python

1
2
pyenv uninstall 3.13.7
pyenv install 3.13.7

⚠️ 注意:必须重新安装,否则 _lzma 不会重新编译。


4.验证修复

安装完成后,检查是否成功编译 _lzma

1
python -c "import lzma; print('LZMA OK')"

如果输出:

LZMA OK

表示已修复。


5. 永久修复方案

如果你经常使用 pyenv,可在 ~/.zshrc~/.bash_profile 中加上:

1
2
export LDFLAGS="-L$(brew --prefix xz)/lib"
export CPPFLAGS="-I$(brew --prefix xz)/include"

这样以后安装新版本 Python 不会再缺 _lzma