说说Python包管理

虽然我的Python学习才起步,不过有时候也需要装一些额外的软件包。一般Python教程上都推荐使用easy_install。这个工具很酷,有了它,我不需要去找软件包。我可以直接easy_install 包名,它会帮我去pypi查找下载最新的软件包,然后自动安装。这个和Linux上的apt、yum之类的包管理器很类似。但是问题来,作为Linux用户,我不希望我在系统上有两套包管理器。有一天我在安装Mako(一个很快的模板引擎),我就在想我是使用apt来安装呢,还是使用easy_install来安装。于是我用apt-cache showpkg python-mako检查一下,apt源中的mako是2.4版本的。然后我又用easy_install检查了一下,是2.5版本的。当然,听说easy_install所使用的pypi库的包往往都是最新的。像我这样的更新狂肯定想装2.5版本的,那我应该使用easy_install安装吗?

经我研究发现,easy_install有以下问题:

  1. 卸载能力低下,easy_install -m 包名,可以卸载软件包,但是卸载后还要手动删除遗留文件。

  2. 可能会和apt冲突。比如某天我用easy_install安装了软件包A,后来我在用apt安装软件包B的时候依赖软件包A,而apt并不知道A的存在。

这样的工具我还敢用吗?所以我在想有没有什么东西,可以用pypi下载最新的软件包,然后自动打成deb包,再使用dpkg来安装,纳入apt的管理。在寻觅中我找到了stdeb这个工具很强大,提供pypi_install的指令,我只需要执行pypi_install Mako,它就会去pypi找最新的mako,然后打成deb包,再安装。很强大吧?让我们看看它还有哪些功能。

stdeb

1
pypi-install mypackage

从pypi下载最新软件包,构建deb包,再安装

1
py2dsc mypackage-0.1.tar.gz

使用源码包构建deb src包

1
python setup.py --command-packages=stdeb.command sdist_dsc

在使用setuptools的python源码包中,构建deb src包

1
python setup.py --command-packages=stdeb.command bdist_deb

在使用setuptools的python源码包中,构建deb包

stdeb很强大,不过也有一些问题,比如有时候生成的deb包名与apt源中的不一样。比如我安装web.py的时候,生成的deb包是python-web-py,而apt源中的是python-webpy。这方面stdeb还有待改进那。

获得stdeb

如何获得stdeb呢,似乎ubuntu9.10的源中并没有stdeb。不过你可以在这里找到它http://packages.ubuntu.com/zh-cn/lucid/python-stdeb

这个版本是给10.04使用的,不过9.10也能用,先用着吧。