运行Scrapy crawl时出现ModuleNotFoundError: No module named '_lzma'错误求助
解决Scrapy虚拟环境中
ModuleNotFoundError: No module named '_lzma'问题 1. 补全系统依赖
先确保系统层面的lzma相关依赖完整安装,执行:
sudo apt-get update && sudo apt-get install liblzma-dev xz-utils -y
2. 重新编译虚拟环境的Python(核心修复)
虚拟环境中的Python如果是编译安装的,大概率是编译时未启用lzma支持,导致系统依赖装了也无法被Python调用。需重新编译Python并指定lzma支持:
- 删除现有虚拟环境:
rm -rf /path/to/your/virtualenv
- 若使用pyenv管理Python,执行以下命令重新安装对应版本并启用lzma:
PYTHON_CONFIGURE_OPTS="--with-lzma=$(which xz)" pyenv install 3.x.x # 替换3.x.x为你实际使用的Python版本 pyenv virtualenv 3.x.x your-env-name
- 若手动编译Python:
# 进入Python源码目录 ./configure --prefix=/usr/local/python3 --with-lzma make && sudo make install
重新创建虚拟环境后,重新安装Scrapy和Playwright。
3. 用backports.lzma替代原生模块(无需编译的折中方案)
如果不想重新编译Python,可通过配置让Python优先加载backports.lzma:
- 确保已安装
backports.lzma:
pip install backports.lzma
- 在虚拟环境的
site-packages目录下创建lzma.py文件,写入:
try: from backports import lzma except ImportError: import lzma
或者在Scrapy项目的settings.py最顶部添加:
try: import backports.lzma as lzma import sys sys.modules['lzma'] = lzma except ImportError: pass
4. 验证修复
激活虚拟环境后,执行测试命令:
scrapy bench
无报错则说明问题已解决。
内容的提问来源于stack exchange,提问作者Exramas
相关产品推荐
相关产品推荐

