python package distribution

什么是package

  • 包是一种用 点式模块名 构造python模块命名空间的方法。
  • Python只把含有__init__.py文件的目录当成包。可以在__init__.py文件中做包的初始化代码。
  • 当创建一个python package后,人们希望可以在其他地方直接import 使用。

什么是 python distribution

  • 一个python distribution 是一个包含了package的 带有版本号的压缩文件。
  • 用户可以从网络上下载,在本地通过pip install安装
  • 现在有2种基本的python 分发模式:Built DistributionSource 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版本等信息
  • WheelsEggs 是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

参考

Python application 的打包和发布

你可能感兴趣的:(python,python,开发语言)