原文首發位址: 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則不能分發成可執行程式。