8

我正在使用 distutils 将一些库打包到一个 deb 中。

大概,我需要正确配置 setup.py 以及/debiandeb 的适当文件。

现在,存储库看起来像这样:

library_name/
 __init__.py
 liba.py
 libb.py
 ...

它被添加为其他程序的依赖项,以便它们可以执行from library_name import liba.

谷歌搜索揭示了 3 到 5 种在 Ubuntu 上部署的不同方法,不包括easy_install方法;文件似乎大部分是零散的并且已经过时了。

我特别希望确保无论 Python 版本如何,该库都放置在正确的系统目录中。当然,也可以无缝地卸载或升级它。

最后是在本地服务器上添加一个 deb,作为我们其他程序的包依赖项。

完成这项工作的规范“简单明了”的方法是什么?

4

2 回答 2

2

您可以使用它pkgme来非常快速地创建 debian 文件。据我所知,与其他类似的工具不同dh-makepkgme设计是基于插件的,这意味着当检测到 python 时,setup.py会正确提取文件中的信息。

有关更多信息,您可以查看最近Ubuntu 开发者周活动上的演讲。

于 2012-02-07T20:03:50.320 回答
2

我之前也曾与 Ubuntu/Debian 的 Python 打包进行过斗争,我同意,这些文档是一团糟/不存在/误导:对于最简单的可能情况,他们确实需要一个快速入门指南。

好吧,就在这里!

安装你的工具。不过,这可能有点矫枉过正:

sudo apt-get install build-essential python-all dh-make devscripts fakeroot

首先将您的代码签出到名为$packagename-$version, like的目录中library_name-0.6.0/,然后再签入cd该目录。运行类似的东西dh_make -i -c gpl3 -e nfirvine@example.com(参见dh_make --help其他选项)。如果一切顺利,您将不会收到任何错误,并且会在./debian. 您可以忽略或删除./debian/*.{ex,EX};这些只是例子。

您可能应该在某个时候检查所有这些文件,但至少,您需要编辑./debian/control./debian/rules. 您应该填写控件中的所有模板字段,即DescriptionHomepage。将行更改为将您的Packagepython-$libname更改Dependscontrol

Depends: ${misc:Depends}, ${python:Depends}

它确保我们的二进制包python-$libname依赖于它需要的 Python 版本。( ${python:Depends} is a "substvar"; they're created when we build; you can inspect their values after your first build in./debian/$packagename.substvars`.)

将行rules从更改dh $@dh $@ --with python2,保留前面的选项卡(它是一个 Makefile)。这导致 debhelper 使用它的 python2 插件;默认仍然使用 pysupport(已弃用,还记得吗?)。

然后,在源根目录中运行以下命令:

debuild -us -uc

这将构建包,而不对其进行签名(您应该稍后学习如何做!)。您应该会看到一些熟悉的 setuptools 行(两次:一次用于 2.6,一次用于 2.7)、成堆的 dh_ 插件和其他构建杂物。最后是lintian的输出,可以检测出一些常见的打包问题;你应该修复这些。很多 lintian 和朋友抱怨的东西只是遵守了打包规则,如果你的 lib 只是内部的,请随意放宽。

顺便说一句,此页面讨论了弃用python-supportpython-central

于 2012-02-08T01:40:10.687 回答