Distutils介绍

这篇文章包含了用Python Distutils发布python模块的各个方面,主要是针对Python的开发人员。如果你想要知道怎么安装python模块,应该参考安装Python模块的章节。

1.1 专业术语

用Distutils是非常简单的,不仅对Python开发者来说,对想安装Python第三方模块的用户来说也很简单。作为一个开发人员,你的职责包括:

  • 写个安装的脚本(通常命名为setup.py)
  • 写个安装的配置文件(可选)
  • 创建一个包含源文件的包
  • 创建一个或多个编译好的包(可选)

这些任务在这篇文章中都会包括。


不是所有的开发人员都会用多种平台。所以期望他们创建适合与多平台的发布版本是不实际的。创建一种中间的媒介来达到所有的平台都可以用的目的是可行的。这种中间包包含着源代码。这样在不同平台 上的用户,就可以用比较简单的方式来安装这些模块。


1.2一个简单的例子



安装脚本通常很简单,虽然它是由python语言写的。但是没有限制你来用它做什么。和自动配置形式的脚本不同,这个安装脚本在编译和安装模型的过程中会执行很多次。


如果你想发布一个叫“foo”的模块,他包含一个"foo.py"的文件,那么你的setup.py文件可以简单的写为


from distutils.core import setup
setup(name='foo',
          version='1.0',
          py_modules=['foo'],)

一些需要注意的地方:


  • 你提供给Distutils的大部分信息都是作为setup()函数的关键字参数传递的
  • 这些参数主要分为两类:包的元数据(名字,版本号)和在包里面包含文件的信息(Python模块的列表)
  • 模型是通过模型名字来进行标记的,而不是文件名
  • 通常来说提供多点的包信息会好一些,包括:作者的名字,email地址,这个项目的URL地址等。

创建一个包含源代码的模型,你应该创建一个setup.py的文件,然后运行下列命令


python setup.py sdist

sdist命令会创建一个包含setup.py和foo.py的压缩文件(Unix的tar,windows的zip)。这个压缩文件会被命名为foo-1.0.tar.gz或者foo-1.0.zip


如果想要安装foo模块,就需要下载下foo模块,解压缩,然后在解压后的文件夹中运行


python setup.py install

这样最终foo.py文件将会被安装到一个合适python第三方包的地方。


这个简单的例子说明了几个Distutils的概念:1、用户和开发者有共同的接口,setup.py 唯一的不同是开发人员命令参数是sdist,用户是install;


如果你想开发出对用户来说,更简单的安装方式,可以创建出多中安装包。例如,开发人员在windows环境下,就可以创建出windows下的可执行文件。


用bdist_wininst命令


python setup.py bdist_wininst

那么将会创建一个foo-1.0.win32.exe的文件


同样用bdist_rpm命令可以创建一个RPM文件,bdist_pkgtool创建pkgtool(Solaris),bdist_sdux创建swinstall(HP_UX)文件。


通过运行下来命令可以知道可以创建什么样的文件。


python setup.py bdist --help-formats

1.3python的专有名词


模块:Python可重用的基本单元,有三种Python模块:纯python模块,扩展python模块和包


纯python模块:用python编写只包含一个.py文件


扩展python模块:用更低级的语言(比如C/C++)写的Python执行部分,通常包含一个动态预编译的文件例如.so文件对于Linux来说,.Dll文件对于Window来说


包:一个包含其他多个模块的模块。和其他不一样的地方就是包含__init__.py文件


1.4 Distutils的专有名词


模块分发:把多个模型分发作为一个下载文件


纯文件分发:只包含一个纯python模块和包的模型分发


非纯文件发放:至少包含一个扩展模型分发


分发的根:你源代码树的顶层目录。及setup.py所在的地方。