and*_*_ch 27 package-management python debian
这个问题试图补充这个问题。我有一个 python 应用程序,它使用来自 PyPI 的第三方模块。我想将我的应用程序打包到 debian 包中,但不知道如何处理不在 debian/ubuntu 存储库中的 python 依赖项(也打包为 debian 包)
解决方案 #1:
将 PyPI 中的模块直接构建到我的 debian 包中。
解决方案#2:
使用stdeb为我需要的所有 PyPI 模块创建 debian 包,并将它们添加到 debian/ubuntu 存储库。
我实际上需要一个解决方案 #3,因为我想在安装我的 debian 包时安装 PyPI 依赖项,最好是安装到 virtualenv 中!
什么是解决方案#3?我需要调整DEBIAN/preinst 维护者脚本吗?
Mes*_*ion 27
我在 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在安装时不需要互联网访问。所有的风险和负担都从最终用户转移到包维护者身上。但是,与#1 存在相同的问题,因为它绕过了大部分打包系统基础设施。毕竟,处理依赖关系(版本、更新、需求、冲突)是dpkg/apt最初创建的原因!:)
解决方案#2:
在一个真正正确的方式™。您为您的依赖项创建 debian 包,将它们列为您的包中的要求,并提供所有.debs或 源包。
从那里,您有多种选择:
提交源包,包括您的软件及其依赖项,以包含到 Debian。如果被接受,它们将自动提供给所有 Debian 用户,包括所有衍生产品,如 Ubuntu。
将源包上传到Launchpad,从而创建任何 Ubuntu 用户(及其衍生产品,如 Linux Mint)都可以轻松添加和安装的PPA
在您的网站上托管您自己的 debian 存储库,任何基于 Debian 的系统的用户都可以将其添加到他们/etc/apt/sources.list.d的apt基础设施中,并使用基础设施来下载、安装和保持更新,(如上所示!)
托管.deb文件以直接下载和安装。没有apt或自动更新涉及思想。
至于如何打包您的 PyPi 依赖项(以及您的 Python 软件!),有许多工具和参考资料可以使这个过程变得简单:
以及许多有用的参考资料:
需要帮忙?检查这些:
| 归档时间: |
|
| 查看次数: |
14738 次 |
| 最近记录: |