天天看點

Python的Distutils子產品與cx_Freeze對比

原文首發位址: http://www.atolin.net/292/

1.Distutils

Distutils包是标準Python庫的一部分;主要特點有兩個:

(1)是讓使用者覺得安裝新子產品、包和工具的過程是簡單、一緻又輕松的;

(2)是讓開發者覺得建立這些新子產品、包和工具的分發包是簡單、一緻又輕松的;

使用是需要寫一個簡單的setup.py腳本,其内容是一種相當固定的格式。可能看上去是這樣的:

from distutils.core import setup, Extension

module1 = Extension(‘PyMesh’,

define_macros = [('PYMESH_EXPORTS', '1')],

libraries = ['MapSubdivision'],

library_dirs = [r'..\Test\Release'],

sources = ['PyMesh.cpp'])

setup(name=’PyMesh’,

version=’1.0.0′,

description = ‘This is a demo package’,

ext_modules=[module1],

)

真正的工作是由導入的distutils實作的,實際上是由setup()函數實作的;

distutils的魔力在于,建立子產品分發包時,和安裝子產品分發包使用的是完全相同的setup.py檔案。

一旦子產品開發者建立了setup.py腳本,建立分發包所需要做的全部事情可能就是下面的幾個步驟:

% python setup.py build

% python setup.py install

% python setup.py sdist

% python setup.py bdist_wininst

2.cx_Freeze

不是Python自帶的标準庫,差別在于cx_Freeze可将子產品分發成可執行檔案(window下的exe檔案),

而distutils則不能分發成可執行程式。