如何使用Python的distutils?

25 投票
5 回答
11254 浏览
提问于 2025-04-11 09:15

我写了一个简单的Python程序,为一个命令行程序添加了一个图形用户界面(GUI)。我想知道如何使用distutils来创建一个安装包。因为它只是一个命令行应用的图形界面,所以它只在*unix系统上运行,我并不担心跨平台的问题。

我的主要目标是为Debian/Ubuntu用户创建一个.deb包,但我对make和configure文件不太了解。到目前为止,我主要是做网页开发的。

编辑:有没有人知道一个使用distutils的项目,这样我可以看看它是怎么工作的,顺便试着构建一下?

这里有一些有用的链接

  • Ubuntu Python打包指南

    这个指南非常有用。我不知道我当初怎么会错过它。它甚至会指导你如何打包一个现有的Python应用。

  • Ubuntu MOTU项目

    这是Ubuntu的官方软件包维护项目,任何人都可以加入,还有很多关于创建各种类型软件包的教程和信息,包括上面的“Python打包指南”。

  • “Python distutils到deb?” - Ars Technica论坛讨论

    根据这个讨论,你不能仅仅使用distutils。它不符合Debian的打包格式(或者类似的东西)。我想这就是为什么在Ubuntu打包指南中需要使用dh_make的原因。

  • “distutils的bdist_deb命令”

    这个讨论很有趣(也是我找到Ubuntu指南的方式),讨论了如何将一个zip文件和一个shell脚本连接起来,创建某种通用可执行文件(任何带有Python和bash的东西)。挺奇怪的。如果有人找到更多关于这个做法的信息,请告诉我,因为我从来没听说过。

  • deb格式的描述以及distutils的适用情况 - Python邮件列表

5 个回答

2

大多数Python程序都会使用distutils。Django是一个例子——你可以查看这个链接了解更多。

你还应该看看这个文档,因为里面内容很全面,还有一些不错的例子。

6

apt-get install python-stdeb

这是一个用来把Python包转换成Debian源包的工具。

这个工具包提供了一些工具,可以通过一个新的命令(sdist_dsc)来从Python包生成Debian包。虽然系统会自动设置一些默认选项,但你可以通过配置文件来定制生成的包的很多方面。

  • pypi-install会去查询Python包索引(PyPI),找到你需要的包,下载它,然后从中创建一个.deb文件并安装这个文件。
  • py2dsc可以把用distutils构建的源代码压缩包转换成Debian源包。
14

可以看看这个distutils简单示例。基本上就是这个样子,不过实际的安装脚本通常会包含更多的信息。不过我还没见过什么特别复杂的。简单来说,你只需要告诉它要安装哪些东西。有时候你还需要提供一些映射字典,因为源文件和安装后的文件结构可能不一样。

下面是一个真实的(匿名处理过的)例子:

#!/usr/bin/python 

from distutils.core import setup 

setup (name = 'Initech Package 3', 
          description = "Services and libraries ABC, DEF", 
          author = "That Guy, Initech Ltd", 
          author_email = "that.guy@initech.com", 
          version = '1.0.5', 
          package_dir = {'Package3' : 'site-packages/Package3'}, 
          packages = ['Package3', 'Package3.Queries'], 
          data_files = [ 
                       ('/etc/Package3', ['etc/Package3/ExternalResources.conf']) 
          ])

撰写回答