使用stdeb为Python脚本项目构建Deb安装包时bdist_deb报错未生成deb文件
构建失败根因定位
从运行日志可直接定位核心阻塞点与非阻塞问题:
- 硬阻塞错误:
dpkg-checkbuilddeps: error: Unmet build dependencies: build-essential:native
stdeb自动生成的Deb构建控制文件,默认将build-essential:native列为强制构建依赖。此前的依赖校验未覆盖dpkg-buildpackage的强制构建依赖项,误判所有构建依赖已安装完成。该依赖缺失会导致dpkg-buildpackage直接中断流程,返回错误码3,也就是最终堆栈抛出CalledProcessError: 3的直接来源,流程根本无法执行到二进制打包的.deb生成步骤。 - 非阻塞合规警告(不直接中断流程,但会导致生成的Deb包不符合Debian打包规范):
- sdist阶段检测不到README、README.rst、README.txt、README.md任意一个标准说明文件
- setup.py缺少必填的
url元数据 - setup.py填写了
author字段,但未按规范配套填写author_email字段 - dpkg构建阶段未检测到合法的维护人身份信息,默认填充为
unknown <unknown@unknown>
分步修复操作
- 安装缺失的系统层面构建依赖
执行命令完成依赖安装:sudo apt update && sudo apt install build-essential debhelper dh-python - 补全setup.py的合规配置
按规范修改后的完整配置如下:from setuptools import setup setup( name="testing_python_package", version=1.0, author="Lee", author_email="lee@example.com", url="https://example.com/testing_python_package", description="testing python stuff for deb package", long_description=open("README.md").read(), packages=["src"], entry_points={"console_scripts": ["pytesting=src.app:main"]}, ) - 补全项目缺失的标准文件
在项目根目录新建README.md,写入项目相关说明内容,消除sdist阶段的文件缺失警告。 - 可选:配置合法的Deb包维护人信息,消除身份信息警告
提前设置环境变量:export DEBFULLNAME="Lee" export DEBEMAIL="lee@example.com" - 重新执行构建命令
运行:sudo python3 setup.py --command-packages=stdeb.command bdist_deb
构建完成后,生成的可安装.deb二进制包、源码包都会存放在项目根目录的deb_dist/文件夹中,可直接通过dpkg -i命令完成安装部署。
内容的提问来源于stack exchange,提问作者Leemosh
相关产品推荐
相关产品推荐

