首页 > ODOO > 正文

Odoo 报 pypdf2 缺失:三步补装

fenij 2026-08-31 33 ODOO

给 Odoo 装自定义模块、或者重启 odoo 服务时突然蹦出 ModuleNotFoundError: No module named 'PyPDF2',别慌——这几乎不是代码问题,而是 Python 依赖没装到”服务真正用的那个 Python”里。最常见就三个坑:虚拟环境没激活、Debian 新版把包改了名、systemd 启动脚本指向了系统 Python。下面三步补装,覆盖九成场景。

报错长什么样

通常在 odoo-bin 启动或模块安装阶段炸,关键就一行:

File "/opt/odoo/odoo/odoo/tools/pdf.py", line 4, in <module>
    from PyPDF2 import PdfFileWriter, PdfFileReader
ModuleNotFoundError: No module named 'PyPDF2'

只要看到 No module named 'PyPDF2',后面全是连锁反应,先把这一行解决掉。

为什么偏偏是 pypdf2

Odoo 早期依赖写死的是 PyPDF2 这个老包,但上游早就重命名为 pypdf(PyPI 上 PyPDF2 已停更)。两个现实坑:

  • Debian 12/13(Trixie):系统仓库只有 python3-pypdf,没有 python3-pypdf2,apt 直接装不上。
  • 用 venv / pyenv 的:你在本机终端 pip install 装到了 venv 里,可 systemd 起的 odoo 服务用的是 /usr/bin/python3,根本看不到 venv 的依赖。

三步补装(按环境选)

1

看清楚环境

确认 odoo 是用系统 Python 还是 venv 跑的,看 systemd 的 ExecStart 路径。

2

装到对的解释器

venv 就先 activate 再 pip;系统是 apt 就装包。装错地方白搭。

3

重启服务

改完 ExecStart 或装完依赖,systemctl daemon-reload 再 restart。

你的环境 该执行的命令
系统 Python(apt 管理) sudo apt install python3-pypdf2
装不上就换 sudo apt install python3-pypdf
venv / pyenv source /path/to/venv/bin/activate && pip install pypdf2
Debian 13 改名 pip install pypdf,或用 equivs 做一个提供 python3-pypdf2 的过渡包

踩坑实录

我在一台用 pyenv 装的 Odoo 15 上栽过跟头:终端里 python -c "import PyPDF2" 明明能跑出版本 1.26.0,可 systemctl start odoo-15 之后服务总是大约一小时就自己退(exit-code 1)。查 journalctl -u odoo-15 -n 50 才看到 traceback 第一行就是 No module named 'PyPDF2'。根因是 systemd 的 [Service] 段 ExecStart 写的是 /usr/bin/python3 /opt/odoo/odoo-bin,用的是系统 Python,而依赖全在 pyenv 的 venv 里。改法是把 ExecStart 换成 venv 里 python 的绝对路径 /home/odoo/.pyenv/versions/odoo-15-env/bin/python,并在同段加 Environment=PATH=... 指向 venv 的 bin,systemctl daemon-reload && systemctl restart odoo-15 之后就再没崩过。

装完还报?三秒自查

  • 到底装到哪个 Python 了which python 和 odoo 服务用的路径对得上吗?对不上就是白装。
  • venv 激活了没:服务靠 systemd 起,不会自动 source 你的 ~/.bashrc,必须写进 unit 文件。
  • requirements 跑全了没:升级后重跑一遍 pip install -r requirements.txt,别只单装一个包。

常见问题

Q:明明 pip 装了 PyPDF2,为什么还报找不到?
A:九成是 venv 没激活,或者服务用的 Python 跟你装包的不是同一个。用 pip show pypdf2 看 Location,再对比 odoo 进程的实际解释器路径。

Q:Debian 13 提示没有 python3-pypdf2 这个包?
A:上游已重命名为 python3-pypdf,直接 apt install python3-pypdf,或用 pip 装 pypdf,Odoo 新版能认。

Q:为什么升级 Odoo 之后突然开始报这个错?
A:新版依赖清单调整了 PDF 库,旧环境缺新依赖。重新执行 pip install -r requirements.txt 一般就解决。

你在 Odoo 部署里还踩过哪些依赖坑?欢迎在 fenij.com 留言聊聊,我整理成下一篇排错笔记。

排错自查清单

  • ☐ 报错长什么样:通常在 odoo-bin 启动或模块安装阶段炸,关键就一行:
  • ☐ 为什么偏偏是 pypdf2:Odoo 早期依赖写死的是 PyPDF2 这个老包,但上游早就重命名为 pypdf(PyPI 上 PyPDF2
  • ☐ 三步补装(按环境选):确认 odoo 是用系统 Python 还是 venv 跑的,看 systemd 的 ExecStart 路径
  • ☐ 踩坑实录:我在一台用 pyenv 装的 Odoo 15 上栽过跟头:终端里 python -c "import PyPD
  • ☐ 装完还报?三秒自查
  • ☐ 常见问题:Q:明明 pip 装了 PyPDF2,为什么还报找不到?A:九成是 venv 没激活,或者服务用的 Pytho

关键命令速查

  • File "/opt/odoo/odoo/odoo/tools/pdf.py", line 4, in <module> from PyPDF2 import PdfF

相关延伸

更系统的排查思路,见 ODOO 分类归档

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: