使用distutils和deb在Ubuntu系统中部署Python模块

时间:2012-02-07 19:50:57

标签: python distutils deb

我正在努力用debutils包装一些库。

据推测,我需要正确配置setup.py,以及deb的相应/debian个文件。

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

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

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

谷歌搜索揭示了在Ubuntu上部署3到5种不同的方法,不包括easy_install方法;文件似乎大部分都是碎片和过时的。

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

最终游戏是在本地服务器上设置deb,作为我们其他程序的包依赖项添加。

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

2 个答案:

答案 0 :(得分:2)

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

有关详细信息,您可以在recent talk活动中查看此Ubuntu Developer Week

答案 1 :(得分:2)

我之前也在与Ubuntu / Debian的Python包装斗争,我同意,文档是混乱/不存在/误导:他们真的需要一个快速入门指南,以了解最简单的情况。

嗯,这是它!

安装工具。但这可能有点矫枉过正:

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

首先将代码签出到名为$packagename-$version的目录,如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。将Package行更改为python-$libnameDepends中的control行更改为:

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_插件和其他建筑物。最后是林田的产量,可以发现一些常见的包装问题;你应该解决这些问题。林天和朋友抱怨的很多东西都只是遵守包装规则,如果你的lib只是内部的,可以随意放松。

顺便说一句,This page talks about the deprecation of python-support and python-central