radnd  
                
                  
                    2024 年10 月 20 日 06:26
                   
                  1 
               
             
            
              我想把这个仓库 打成deb包,在调用教程 里的debmake以后,调用dh-python3没能自动生成依赖,看了dh-python的邮件列表好像也没有这种问题,有人遇到过这种事吗
附上日志
dh_python3 -v           
D: dh_python3 dh_python3:180: version: 6.20240824
D: dh_python3 dh_python3:181: argv: ['/usr/bin/dh_python3', '-v']
D: dh_python3 dh_python3:182: options: Namespace(guess_deps=True, skip_private=False, verbose=True, arch=None, package=None, no_package=None, remaining_packages=False, compile_all=False, vrange=None, regexpr=None, accept_upstream_versions=False, depends=None, depends_section=None, recommends=None, recommends_section=None, suggests=None, suggests_section=None, requires=None, shebang=None, ignore_shebangs=False, clean_dbg_pkg=True, no_ext_rename=False, no_shebang_rewrite=False, private_dir=None, O=None)
D: dh_python3 dh_python3:183: supported Python versions: 3.12 (default=3.12)
D: dh_python3 debhelper:174: source=ssfconv, binary packages=['ssfconv']
D: dh_python3 dh_python3:205: processing package ssfconv...
D: dh_python3 fs:335: package ssfconv details = {'requires.txt': set(), 'egg-info': set(), 'dist-info': set(), 'nsp.txt': set(), 'shebangs': set(), 'public_vers': set(), 'private_dirs': {}, 'compile': False, 'ext_vers': set(), 'ext_no_version': set()}
D: dh_python3 depends:103: generating dependencies for package ssfconv
D: dh_python3 depends:253: D=set(); R=[]; S=[]; E=[], B=[]; RT=[]
 
            
              
            
           
          
            
              
                hosiet  
              
                  
                    2024 年10 月 29 日 19:04
                   
                  2 
               
             
            
              在 binary package dependency 一栏中生成依赖的前提是这些包出现在 source package build-dependency 中。所以操作上应该将 pyproject.toml 中的 depends 先用人脑映射到 Debian 的包名,然后将这些包名(python3-numpy, python3-pil 和 python3-pycryptodome)放入 Build-Depends 中,然后再指望 binary dependency 能自动填写。
其次,你的打包脚本在哪里?建议把链接发来大家看看。
             
            
              
            
           
          
            
              
                radnd  
              
                  
                    2024 年10 月 30 日 17:08
                   
                  3 
               
             
            
              我又看了一遍教程,看来起来 dh-python3 不是用来手动调用的,但我还是没能打包成功
#首先获取源码
debmake -b':py3' -x1
editor debian/rules
在 dh $@ --with python3 后面加上 --buildsystem=pybuild
apt install python3-numpy #不装它debuild就报错找不到numpy模块
debuild
这样操作以后,确实打出来了“二进制”包,但是在control文件里依赖那一行不全
Depends: python3-numpy, python3-pil, python3:any
我把 python3-pycryptodome 手动填到了Build-Depends: 中,可生成的包中 control 的  Depends: 依旧是上方这样没有变
所以最终我得到了一个看起来能用,但需要额外手动装依赖的deb包
             
            
              
            
           
          
            
              
                hosiet  
              
                  
                    2024 年10 月 30 日 17:40
                   
                  4 
               
             
            
              首先要明确的是 debmake 只是一个自动模板生成工具,具体生成的对不对得用肉眼检查。
python 包依赖关系的自动推导一直以来没有共享链接库的自动推导来得稳定。如果按照教程,打包构建时会出现这样的提示:
I: dh_python3 pydist:316: Cannot find package that provides pycryptodome. Please add package that provides it to Build-Depends or add “pycryptodome python3-pycryptodome” line to debian/py3dist-overrides or add proper dependency to Depends by hand and ignore this info.
 
这个就是依赖自动推导失败的结果。依赖关系的自动推导不是魔法,它只能通过软件包的名字猜测这个依赖是由谁提供的。既然 pyproject.toml 中写了 pycryptodome,上游说明安装也是 pip install pycryptodome,那么猜测自然也是猜测存在可以直接 Python import pycryptodome 得到的文件。遗憾的是这个库的上游作者不走寻常路,根据 pycryptodome · PyPI  来看这个库需要 import Crypto 来使用,因此依赖关系的自动推导就失败了,需要手动在 binary Dependency 中添加依赖关系(或者按照提示信息写一个 debian/py3dist-overrides 把依赖的自动推导手动调整一下。
打包工作繁杂的一面就在这里:通用工具可以解决90%的情况,但一旦遇到边边角角的场景就得像上面那样具体问题具体分析。我放了一份自己写的打包用的文件在 GitHub - hosiet/ssfconv at example-deb-package  这里。
             
            
              
            
           
          
            
              
                radnd  
              
                  
                    2025 年2 月 20 日 09:55
                   
                  5 
               
             
            
              确实很复杂,我今天重新开始研究怎么打这个包,照您说的想写个 py3dist-overrides,结果发现 pydist/cpython3_fallback · master · Debian Python Team / tools / dh-python · GitLab  这个文件里有一条 pycryptodomex -> python3-pycryptodome ,调查以后发现 debian 的dome 其实是domex,所以我应该改一下代码,改成依赖domex,打包就可以自动进行了。
             
            
              
            
           
          
            
              
                radnd  
              
                  
                    2025 年2 月 23 日 08:45
                   
                  6 
               
             
            
              包打出来了,在这里记载一下怎么做的Debian 13 
把依赖装上,sudo apt install python3-{all,pil,pycryptodome,numpy} 
作为上游 python3 -m build .构建得到源码包ssfconv-1.2.0.tar.gz 
解压,cd进去执行 debmake -b':py3' -x0生成模板 
debuildssfconv_1.2.0-1_amd64.deb 
修改debian/rules,像教程中一样添加
export PYBUILD_NAME=ssfconv
export PYBUILD_VERBOSE=1
export DH_VERBOSE=1
再次 debuild,消去了一部分报错,得到 ssfconv_1.2.0-1_all.deb,剩下的报错似乎都是没有填写手册代码仓库等元信息所致
Ubuntu 24.04 
	dh $@ --with python3 --buildsystem=pybuild
control 的 Build-Depends 补充 pybuild-plugin-pyproject
             
            
              1 个赞