我是debian打包的新手。
我正在尝试使我的 git 项目成为一个 debian 包,然后上传到 ppa,这使人们可以轻松安装我的包。
问题是我的项目由 c++、python、bash 文件组成。
我成功地编写了一个 c++、bash 的 debian 脚本(例如control
,rules
或 sth)。
但是,python 制作起来有点困难,因为我的 python 脚本使用tensorflow
.
起初,我不得不想出一个python安装计划。
这是我到目前为止所发现的。
- 使用系统的python
IIUC,它只是通过Build-Depends
在control
文件中设置到、、、dh-python
和到文件中来完成。python3-all
python3-setuptools
dh $@ --with python3
rules
但是由于我希望用户安装特定版本的tensorflow
,所以用户必须在安装我的项目之前自己安装 tensorflow==2.xx ,这很困扰他们并使他们的python环境变脏。
- 利用
dh_virtualenv
IIUC,dh_virtualenv
将我的项目安装到/opt/venvs/«packagename»
. 然后,即使用户安装了我的项目,他们也无法在 bash 命令行中运行我的项目,因为/opt/venvs
不是$PATH
.
- 使用
stdeb
或Pybuild
有了它们,我可以构建我的项目所依赖的 python 包,然后使用它们。但是,不幸的是,tensorflow
似乎不可能用stdeb
or构建Pybuild
:(
- 使用
postinst
脚本
事实上,这是我认为对我来说最好的。在我的项目被安装到之后/usr/bin
,我让postinst
python 虚拟环境进入/opt/my_venv/
,然后让我的项目的二进制文件指向它。我认为它运作良好(我希望..)
#!/bin/bash
python3 -m venv /opt/my_venv
/opt/my_venv/bin/python3 -m pip install tensorflow
...
但是,问题是,有一些关于使用postinst
脚本的警告。
https://www.debian.org/doc/manuals/maint-guide/dother.en.html#maintscripts
作为新手维护者,您应该避免手动编辑维护者脚本,因为它们是有问题的。
如果你没有听我的,并且为一个包创建了自定义维护脚本,你应该确保测试它们不仅用于安装和升级,还用于删除和清除。
https://askubuntu.com/questions/327543/how-can-a-debian-package-install-python-modules-from-pypi
在安装二进制文件 (.deb) 时即时下载非 debian 软件包是一种严重的安全风险,绝对是禁忌。
嗯..我认为我也错过了一些非常重要的事情。
你能给我一些意见吗?
我可以选择4选项吗?