当先锋百科网

首页 1 2 3 4 5 6 7

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

主要工具
  • distutils:官方库distutils,使用安装脚本setup.py来构建、安装包,从1998年就是标准库的一部分,直到2000年停止开发。
  • setuptools:它是替代distutils的增强版工具集,包含easy_install工具,使用ez_setup.py文件。支持egg格式的构建和安装。提供查询、下载、安装、构建、发布、管理等包管理功能。
  • pip:pip目前包管理的事实标准。构建在setuptools之上,替代easy_install的,同样提供丰富的包管理功能,Python3.4之前,需要单独安装,从Python3.4直接把包含在安装文件中。
  • wheel:wheel格式定义在PEP427中,wheel文件不包括.pyc文件,因此bdist_wheel作为setuptools的扩展命令,这个命令可以用来生成新打包格式wheel。
使用setup.py打包

setup.py创建一个源代码分发包的例子。

  • 需要打包的源代码:
    在这里插入图片描述
  • 项目根目录下,构建一个setup.py文件,setup.py如下
from distutils.core import  setup
#导入setup函数并传参
setup(name='m',
      version='1',
      description='python m',
      author='dabai',
      author_email='dd',
      packages=['m']
      )
 # name 名字
 #version 版本
 #packages=[]打包列表
 #packages=['m'],指定m,就会把m所有的非目录子模块打包
 #description描述信息
 # author 作者

查询命令的帮助
$
setup.py --help
$python setup.py --help-commands
$setup.py cmd --help

  • build 命令,编译
    创建一个build目录
    $python setup.py build
    以下是packages=['m]配置的结果
    在这里插入图片描述
    在项目目录下多了build目录,有一个lib子目录,lib下就是模块m的目录了,m目录下的*.py文件被复制了,但是子目录没有被复制
  • install命令,安装
    build后就可以install,直接运行
$python setup.py install

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

  • sdist命令
$python setup.py sdist

创建源代码分发包
产生一个dist目录,里面生成一个带版本号的压缩包。
在其他地方解压缩这个文件,里面有setup.py,就可以使用 p y t h o n s e t u p . p y i n s t a l l 安 装 了 , 也 可 以 python setup.py install安装了,也可以 pythonsetup.pyinstallpip install m-1.zip直接使用pip安装这个压缩包

在这里插入图片描述

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里面的版块没有太好的审核机制,不保证安全。

wheel包

安装wheel依赖

$pip install wheel

setup.py修改如下

from setuptools import  setup
#导入setup函数并传参
setup(name='m',
      version='0.1.1',
      description='python m',
      author='dabai',
      author_email='dd',
      ackages=['m']
      )
import wheel
python setup.py bdist_egg
python setup.py bdist_wheel