【问题标题】:How to make a debian package which includes several python packages如何制作一个包含多个 python 包的 debian 包
【发布时间】:2015-12-22 15:28:45
【问题描述】:

我想创建一个 debian 包,当安装它时,它将安装几个带有 pip 的 python 包。我可以想到两种方法:

  1. 将 python 包安装到一个目录中,然后从该目录创建一个 debian 包。但这会混淆构建主机(例如它的 pip 元数据),尤其是在主机已经安装了其中一些包的情况下。

  2. 制作一个包含所有python包的debian包,在debian安装和卸载过程中,运行一些脚本来安装/卸载python包。但这需要另外维护两个脚本,以及在已安装的机器中保存所有 python 包的地方。

任何其他解决方案以及解决此问题的最佳方法是什么?

【问题讨论】:

  • 依赖关系是使用 Debian 控制文件处理的。通过安装maint-guide可以找到很多信息,即apt-get install maint-guide。如果你这样做,包系统会处理一切。
  • 我们不能依赖它,因为互联网无法保证,我们想控制我们安装的确切文件。
  • 使用包不需要网络。但是如果它们丢失了,例如 python-matplotlib,你需要提供这个所需的包
  • 我想我以前研究过这个,我找不到指定本地目录的方法,当 pip 需要依赖项时它将搜索。

标签: python debian


【解决方案1】:

在我看来,如果你想创建一个 debian 包,你应该避免引用外部分发系统。 Here有关于在debian下创建python包的指南。

编辑:抱歉,我现在看到关于 Python 打包的 Debian wiki 页面可能已经过时了。你可以阅读:

【讨论】:

  • 谢谢!但是好像只适用于一个debian包中的一个python包?我不确定增强它需要做多少工作......
【解决方案2】:

如果你想在存储库中创建一个依赖于python-<packagename> 的元包,这很容易,我想你已经知道了。 (如果没有,谷歌equivs 包)。我假设您想安装最新版本的 python 软件包,或者 debian 存储库中缺少某些软件包,因此不会使用 debian 存储库。

pip 是一个很好的工具,但是如果你卸载一个 python 包,你可以打破依赖关系,而另一个包需要另一个包,该包由 apt 在你的元包之后安装。 apt是你的朋友。你应该小心。为了克服这个问题,我的建议是将适当的包名称添加到元包的控制文件的ProvidesConflictsReplaces 字段中,无论您是通过pip 动态安装python 包还是将它们捆绑在主包中。 我快速搜索了“将多个debian包捆绑到一个包中”,没有找到解决方案。

如果您想将您的 python 包与系统范围的 python 包完全分开,virtualenv 是我所知道的最佳选择。 如果您想使用 pip 构建兼容 debian 的软件包,stdeb 可以轻松完成。

此外,据我所知,我在 Kali Linux(基于 Debian)中看到一些包在安装或启动过程中动态安装 python 包,但是 Debian 政策可能不允许这种灵活性不破坏依赖关系(如果你想构建一个官方包)。我希望这个答案能引导您朝着正确的方向前进。

【讨论】:

  • 谢谢!我真正想做的是提供一个debian包来安装我们想要的所有python模块,而不依赖于互联网。我们应该做的最好的事情可能是创建一个 VM 映像,但我们现在不能......
  • 所以,我想到的最后一个想法是使用本地 pip 服务器,这样在安装预下载的软件包时就不需要互联网 stackoverflow.com/q/18052217/5303401
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 2016-07-15
  • 2020-05-02
  • 2018-01-20
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
相关资源
最近更新 更多