我已经在Debian IRC频道irc://irc.debian.org#debian-mentors中与一些维护人员进行了交谈,要求完全相同,并且普遍的共识是:
解决方案1:
通过复制单个代码库中的源文件来将依赖项集成到程序包中的做法很不受欢迎。这将破坏处理依赖关系,更新,版本控制等打包系统的目的。
解决方案3:
在安装二进制文件(.deb
)时即时下载非Debian软件包会带来严重的安全风险,绝对不能。您甚至无法 通过提取来检查依赖项deb
,因为它们是在安装时下载并安装的。这是一种完全绕过存储库系统的方法。没有一个相关的用户会对在后台(并且root
记住!)从不受信任的来源下载其他不受信任的软件的软件包感到满意。是的,这需要摆弄DEBIAN/postinst
(或preinst
)并签发wget
(或就您而言,pip install
),这是Flash,Oracle Java,Steam和其他公司采用的方法。但这是专有的封闭源代码软件,因此它们的安全性始终无法实现。
解决方案#1.5:
你没有提到它,但你只能在依赖整合构建时间,即在源包(.orig.tar.gz
,.debian.tar.gz
,.dsc
黑社会),通过创建“二进制”的包(当一封来自PyPI下载.deb
)。的指令pip install
将进入debian/rules
(注意小写debian
,而不是二进制包),并在发出debuild
或时执行dpkg-buildpackage
。
这是介于#1和#3之间的中间立场。它可以缓解(但不能解决!)#3的某些问题:至少您可以检查最终产品,并且.deb
在安装时不需要Internet访问。所有风险和负担都从最终用户转移到包装维护者。但是,它具有与#1相同的问题,因为它绕过了大多数包装系统基础结构。毕竟,处理依赖关系(版本,更新,需求,冲突)是为什么dpkg
/ apt
首先创建的原因!:)
解决方案2:
在一个真正正确的方式™。您可以为依赖项创建debian软件包,将它们作为需求列出在软件包中,然后运送所有.debs
或源软件包。
从那里,您有许多选择:
提交源软件包,包括您的软件及其依赖项,以将其包含到Debian中。如果被接受,它们将自动提供给所有Debian用户,包括像Ubuntu这样的所有衍生产品。
将源软件包上传到Launchpad,从而创建一个PPA,任何Ubuntu用户(及其衍生版本,如Linux Mint)都可以轻松添加和安装
在您的网站中托管您自己的debian存储库,任何基于Debian的系统中的用户都可以添加到他们的系统中,/etc/apt/sources.list.d
并使用该apt
基础结构来下载,安装和保持更新(如上!)。
托管.deb
文件以直接下载和安装。没有apt
或涉及到自动更新的想法。
至于如何打包您的PyPi依赖项(以及您的python软件!),有许多工具和参考可以简化该过程:
以及许多有用的参考资料:
需要帮忙?检查那些: