什么是package
- 包是一种用 点式模块名 构造python模块命名空间的方法。
- Python只把含有__init__.py文件的目录当成包。可以在__init__.py文件中做包的初始化代码。
- 当创建一个python package后,人们希望可以在其他地方直接import 使用。
什么是 python distribution
- 一个python distribution 是一个包含了
package
的 带有版本号的压缩文件。 - 用户可以从网络上下载,在本地通过
pip install
安装 - 现在有2种基本的python 分发模式:
Built Distribution
和Source Distribution
Source Distrution (sdist)
- sdist 是最简单的分发模式。
- sdist 模型是将所有的源代码打包成一个
.tar.gz
压缩文件,在用户的系统中执行最终的编译和安装
python3 setup.py sdist
pip3 install dist/xxx.tar.gz
Built Distribution(bdist)
- bdist 模式更复杂,因为它实际上构建出了package。压缩文件中包含编译后的
.so, .dll, .dylib
等二进制文件,压缩文件名称中指定了系统信息和python版本等信息 Wheels
和Eggs
是bdist 包格式。Eggs 是在2004年提出的一种格式。Wheels是在2012年提出的,用于取代egg。所以不要再使用Eggs了。- Eggs 和 Wheels 实际上是zip文件,Eggs 用
.egg
后缀,Wheels 用.whl
后缀。 - Wheels的命名格式是:
{dist}-{version}|-{build}|-{python}-{abi}-{platform}.whl
- 用户系统不必再编译就能使用。
python3 setup.py bdist_wheel
pip3 install dist/xxx.whl
Wheel
根据 application 包含的代码类型以及其所支持的 python 版本, wheel 格式可细分为三种
- Universal wheel: 纯 python 代码,并且支持 python 2 和 3
- Pure python wheel: 纯 python 代码,不同时支持 python2 和 3
- Platform wheel: 非纯 python 代码
采用如下命令可编译成 universal wheel
python setup.py bdist_wheel --universal
running bdist_wheel
running build
installing to build/bdist.macosx-10.10-intel/wheel
......
running install_scripts
creating build/bdist.macosx-10.10-intel/wheel/packagedemo-2015.09.1.dist-info/WHEEL
$ ls dist
packagedemo-2015.09.1-py2-none-any.whl
采用如下命令可编译成非 universal wheel(即 pure python wheel 或 platform wheel):
$ python setup.py bdist_wheel
running bdist_wheel
running build
installing to build/bdist.macosx-10.10-intel/wheel
......
running install_scripts
creating build/bdist.macosx-10.10-intel/wheel/packagedemo-2015.09.1.dist-info/WHEEL
$ ls dist
packagedemo-2015.09.1-py2.py3-none-any.whl
usage
- pip总是优先选择 wheel文件,而不是sdist文件。
python setup.py sdist bdist_wheel
可以生成sdist和bdist