根本原因是Python编译时缺失libffi-dev等开发库,导致_ctypes等C扩展未编译;需安装libffi-dev、libbz2-dev、zlib1g-dev、libssl-dev等全套-dev包,并重新编译Python才能生效。

pip install报错说找不到_ctypes或_bz2模块
这不是pip本身的问题,而是Python解释器在编译时就没把对应C扩展编译进去。常见现象是运行pip install时直接崩溃,或提示ModuleNotFoundError: No module named '_ctypes'、ImportError: No module named '_bz2'。根本原因是安装Python时系统缺开发头文件,导致这些底层模块被跳过。
Ubuntu/Debian上必须装的-dev包有哪些
别只看报错名就单装一个,libffi-dev和libbz2-dev只是冰山一角,实际要一起装全:
-
libffi-dev:否则_ctypes、cryptography等包死活装不上 -
libbz2-dev:影响tarfile、pip自身解压逻辑 -
zlib1g-dev:没它连gzip支持都残缺 -
libssl-dev:HTTPS、requests、pip联网全跪 -
libreadline-dev:虽然不直接影响pip,但少了它交互式命令行会卡顿
执行这条命令一次清掉所有隐患:sudo apt install -y build-essential libffi-dev libbz2-dev zlib1g-dev libssl-dev libreadline-dev libsqlite3-dev
装完依赖后Python要重新编译才能生效
很多人装完libffi-dev就急着跑pip install,结果还是报错——因为已安装的Python二进制文件不会自动补上缺失模块。你得:
立即学习“Python免费学习笔记(深入)”;
- 如果是用
pyenv装的,删掉旧版本再重装:pyenv uninstall 3.12.0 && pyenv install 3.12.0 - 如果是自己
./configure && make && make install装的,必须回到源码目录,删掉build/目录,再跑一遍全流程 - 别试图用
make clean省事,它不清理configure生成的缓存,容易漏掉检测逻辑
验证是否成功:启动Python后分别执行import _ctypes、import _bz2、import ssl,都不报错才算真搞定。
CentOS/RHEL系用户注意包名后缀不同
别照抄Ubuntu命令,libffi-dev在RHEL系叫libffi-devel,zlib1g-dev叫zlib-devel,libssl-dev是openssl-devel。漏掉-devel后缀等于白装——运行时库(如zlib)和开发头文件(zlib-devel)是两个独立包。
典型错误就是只装了openssl却没装openssl-devel,./configure阶段照样报openssl headers missing,后续pip装任何带SSL需求的包都会失败。


















