文章目录

Python打包分发

1.包管理

Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了。但是为了更多项目调用使用,或者共享给别人,就需要打包,或发布到网络,以便供人使用。目的也是为了复用。

2.打包的主要工具

  1. distutils
  1. setuptools
  • 它是替代distutils的增强版工具集,包含easy_install工具,使用ez_setup.py文件。支持egg格式的构建和安装。 提供查询、下载、安装、构建、发布、管理等包管理功能。
  • setuptools是包管理的核心模块。后来,setuptools开发缓慢了,出现基于setuptools的distribute来替代setuptools。2013年,这两个项目重新合 并,distribute被废弃,setuptools依然是Python安装打包的标准方式。
  1. pip
  • pip目前包管理的事实标准。
  • 构建在setuptools之上,替代easy_install的。同样提供丰富的包管理功能。
  • Python3.4之前,需要单独安装,从Python3.4开始直接包含在安装文件中。
  1. wheel
  • wheel格式定义在PEP427中。wheel文件中不包含.pyc文件。
  • 提供 bdist_wheel 作为 setuptools 的扩展命令,这个命令可以用来生成新打包格式 wheel。
  • pip 从1.4版本开始 提供了一个 wheel 子命令来安装 wheel 包。当然,需要先安装 wheel 模块。 它可以让Python库以二进制形式安装,而不需要在本地编译。

3.使用setup.py打包

setup.py创建一个源代码分发包的例子,参照例子 ​​https://docs.python.org/3.5/distutils/setupscript.html​​​。 可以在帮助文档chm上搜索索引setup,点击上面的Distributing Python Modules (Legacy version) ,然后选 择 ​​Writing the Setup Script​

  • 包结构如下:
  • Python打包分发_python

  • 在项目根目录,构建一个setup.py文件。setup.py文件内容如下:
from distutils.core import setup

#导入setup函數
setup(name="m", #名称
version="0.1.0", #版本
author="xdd", #作者
author_email="wwww.xdd@xdd.com", #作者邮箱
url="https://www.xdd.com/", #包的主页,可以不写
packages=["m","m.m2","m.m2.m21"] #打包列表
)
  • 注意:
  1. packages是一个列表,记录需要打包的包名,在打包时,只会构建记录在packages中的包,和包内的模块。如果包中包含其他包,没有记录在列表中,那么该包将不会出现在打包后的包中。
  2. 如果packages = ["m"]那么打包只会构建m文件夹下的*.py文件,不会添加其他多余文件和子包。
  • setup()常用带参数:
  1. name #名字
  2. version #版本号
  3. package=[] #打包列表
  4. description #描述信息
  5. author #作者
  6. author_email #作者邮件
  7. url #包的主页,可以不写

命令行操作打包

  • 创建好setup.py文件后,想要打包,需要在命令行中操作,进入控制台,切换到项目的根目录。

查询命令帮助

  • ​setup.py --help [cmd1 cmd2 ...]​​​ #查看setup命令的使用帮助
    例如:
  • ​python setup.py --help-commands​​ #看setup命令的帮助文档
  • ​python setup.py cmd --help​​ #查看setup命令的帮助文档
1.build命令,编译

语法:

python ​​setup.py​​ build

  • 1.执行结果如下:
D:\MyPythonUse\UserPython2>python setup.py build
running build
running build_py
creating build
creating build\lib
creating build\lib\m
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m
creating build\lib\m\m2
copying m\m2\m22.py -> build\lib\m\m2
copying m\m2\__init__.py -> build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init__.py -> build\lib\m\m2\m21

D:\MyPythonUse\UserPython2>
  • 2.会在当前位置创建一个build目录,build目录中会创建一个lib子目录,lib下就是模块m的目录了。结构如下:
  • Python打包分发_包管理_02

  • 3.build得到的文件,直接拷贝到其他姓名就可以用。
2.install命令,安装

在build后可以install,直接运行

python ​​setup.py​​ install

如果没有build,会先build编译,然后安装。

安装后会出现在python环境中的site-packages文件夹中,如下图的m包安装后

Python打包分发_帮助文档_03

3.sdist命令

$python ​​setup.py​​ sdist

创建原码的分发包。
参数一个dlist目录。里面生成一个带版本号的压缩包。
在其他地方解压缩这个文件,里面有​​​setup.py​​​,就可以使用 ​​$ python setup.py install​​​ 安装了, 也可以 ​​$ pip install m-0.1.0.zip​​ 直接使用pip安装这个压缩包。

4.bdist命令

二进制分发包,或称作安装程序。它可以生成目标操作系统的安装程序。

制作windows下的安装包
$ python setup.py bdist_wininst
$ python setup.py bdist_msi
$ python setup.py bdist --format=msi

rpm包
$ python setup.py bdist_rpm
$ python setup.py bdist --format=rpm

压缩文件
$ python setup.py bdist --format=zip
$ python setup.py bdist --format=gztar

可以把自己写好的模块发布到公共的Pypi上,也可以搭建Pypi私服,供企业内部使用。
Pypi里面的模块没有太好的审核机制,不保证安全,请慎重使用。

5.wheel包

安装wheel依赖

$ pip install wheel

wheel是setuptools命令的扩展,所有需要使用setuptools中的setup函数
setup.py文件修改后如下:

# from distutils.core import setup
from setuptools import setup
#导入setup函數
setup(name="m", #名称
version="0.1.0", #版本
author="xdd", #作者
author_email="wwww.xdd@xdd.com", #作者邮箱
url="https://www.xdd.com/", #包的主页,可以不写
packages=["m","m.m2","m.m2.m21"] #打包列表
)
  • 将包打包成egg格式

$python ​​setup.py​​ bdist_egg

  • 将包打包成whl格式

$python ​​setup.py​​ bdist_wheel