Python程序打包 |《Python基础教程》第18章笔记
《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930
第18章 程序打包
程序可以发布后,你可能想先将它打包。如果程序只包含一个.py
文件,这可能不是问题。然而,如果用户不是程序员,即便是将简单的Python库放到正确的位置或调整PYTHONPATH也可能超出了其能力范围。用户通常希望只需双击安装程序,再按安装向导说的做就能将程序安装好。
Python程序员有较低级的接口可以使用。Setuptools是用于发布Python包的工具包,让你能够使用Python轻松地编写安装脚本。这些脚本可用于生成可发布的归档文档,供用户编译和安装你编写的库。
本章重点介绍Setuptools,因为这是每个Python程序员都要用到的工具。实际上,Setuptools并非只能用于创建基于脚本的Python安装程序,还可用于编译模块。另外,通过将其与py2exe和py2app结合起来使用,还可创建Windows和macOS平台上的独立的可执行程序。
18.1 Setuptools基础
“Python打包用户指南”(packaging.python.org)和Setuptools官网(http://setuptools.readthedocs.io)有很多相关的文档。使用Setuptools可完成很多任务,只需编写像代码清单18-1这样简单的脚本即可。
代码清单18-1 简单的Setuptools安装脚本(setup.py)
from setuptools import setup
setup(name='Hello',
version='1.0',
description='A simple example',
author='Magnus Lie Hetland',
py_modules=['hello'])
以上代码中,函数setup
的所有参数都是可选的。请确保setup.py
与简单模块hello.py
在同一目录下,然后执行python setup.py build
,示例输出如下。
running build
running build_py
creating build
creating build/lib
copying hello.py -> build/lib
如输出所示,在命令build
执行过程中,Setuptools创建了一个名为build
的目录,其中包含子目录lib
,然后将hello.py
复制到了这个子目录中。目录build
相当于工作区,Setuptools在其中组装包并编译扩展库。
如果执行安装命令install
,则会自动运行命令build
,然后将模块hello.py
复制到PYTHONPATH
指定的特定目录中,在此过程中会创建一个.egg
文件,这是一个独立的Python包。目前没有标准的uninstall
命令,因此需要手工卸载安装的模块。
18.2 打包
通过对setup.py
稍作修改,你可以用它来创建Windows安装程序、RPM包、egg文件、wheel文件等(wheel将最终取代egg)。本节只介绍如何创建源代码归档文件.tar.gz
。
执行命令python setup.py sdist
(sdist = source distribution),进行源代码归档。注意,归档规范建议在setup.py
中添加author_email
选项,在当前目录中添加README.md
。命令执行完成后,在当前目录下应该会多出一个dist
目录。在这个目录中有一个名为Hello-1.0.tar.gz
的文件。你可将其分发给他人,而对方可将其解压缩,再使用脚本setup.py
进行安装。
18.4 使用py2exe创建可执行程序
py2exe是Setuptools的一个扩展(可通过pip来安装它),让你能够创建可执行的Windows程序(.exe文件)。这在你不想给用户增加单独安装Python解释器的负担时很有用。py2exe包可用来创建带GUI(参见第12章)的可执行文件。下面将使用这个非常简单的示例:
print('Hello, world!')
input('Press <enter>')
创建一个空目录,再将这个文件(hello.py)放到这个目录中,然后创建一个类似于下面的setup.py
文件:
from distutils.core import setup
import py2exe
setup(console=['hello.py'])
运行脚本:python setup.py py2exe
这将创建一个控制台应用程序(dist\hello.exe)。
有关py2exe的工作原理和高级用法的详细信息,请参阅py2exe官网(http://www.py2exe.org)。如果你使用的是macOS,py2app提供了类似的功能(http://pythonhosted.org/py2app)。
要让别人能够使用pip安装你开发的包,必须向Python Package Index(PyPI)注册它,详见标准库文档。