文章目录

  • Python打包分发
    • 1.包管理
    • 2.打包的主要工具
    • 3.使用setup.py打包
      • 命令行操作打包
        • 查询命令帮助
          • 1.build命令,编译
          • 2.install命令,安装
          • 3.sdist命令
          • 4.bdist命令
          • 5.wheel包

Python打包分发

1.包管理

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

  • Pypi(Python Package Index),公共的模块存储中心,https://pypi.python.org/pypi

2.打包的主要工具

  1. distutils

    • 官方库distutils,使用安装脚本setup.py 来构建、安装包。
    • 从1998年就是标准库的一部分,直到2000年停止开发。
  2. setuptools
    • 它是替代distutils的增强版工具集,包含easy_install工具,使用ez_setup.py文件。支持egg格式的构建和安装。 提供查询、下载、安装、构建、发布、管理等包管理功能。
    • setuptools是包管理的核心模块。后来,setuptools开发缓慢了,出现基于setuptools的distribute来替代setuptools。2013年,这两个项目重新合 并,distribute被废弃,setuptools依然是Python安装打包的标准方式。
  3. pip
    • pip目前包管理的事实标准。
    • 构建在setuptools之上,替代easy_install的。同样提供丰富的包管理功能。
    • Python3.4之前,需要单独安装,从Python3.4开始直接包含在安装文件中。
  4. 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

  • 包结构如下:

  • 在项目根目录,构建一个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\m21D:\MyPythonUse\UserPython2>
  • 2.会在当前位置创建一个build目录,build目录中会创建一个lib子目录,lib下就是模块m的目录了。结构如下:

  • 3.build得到的文件,直接拷贝到其他姓名就可以用。

2.install命令,安装

在build后可以install,直接运行

python setup.py install

如果没有build,会先build编译,然后安装。
安装后会出现在python环境中的site-packages文件夹中,如下图的m包安装后

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=msirpm包
$ 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

Python打包分发相关推荐

  1. Python打包分发工具setuptools简介

    Python打包分发工具setuptools 通过这个工具,可以打包安装插件,并且还可以发布到PyPI上面,具体参考: 1.http://python.jobbole.com/87240/ 2.htt ...

  2. python打包分发工具:setuptools

    你是否也想写一个python库,想向社会开源或者企业内部使用,想让别人通过简单的命令pip install 安装你的库.那么setuptools绝对是最好用的python打包与分发工具. setupt ...

  3. python打包和添加数据文件_python库打包分发setup.py编写指南

    python库打包分发setup.py编写指南 python之所以强大,在于有许许多多的人贡献自己的力量,他们将自己开发的项目打包上传至pypi,这使得python社区有取之不尽用之不竭的第三方库.工 ...

  4. Setuptools(Python打包工具)

    目录 前言 一.安装 二.源码包介绍 2-1.源码包sdist 2-1-1.打包成源码包sdist 2-1-2.安装源码包 2-2.二进制包bdist 2-2-1.打包成源码包bdist 2-2-2. ...

  5. Python打包发布

    python打包分发 ================== 打包工具:setuptools,wheel ------------------ ###操作顺序: ####1. 项目配置准备,主要是在项目 ...

  6. python 查看当前目录_「Python」打包分发工具setuptools学习

    ❝ setuptools是python标准的打包分发工具,它可以将我们编写的python项目打包安装,这样其他同事就可以像调用标准库或python第三方库那样直接使用:也可以将项目上传到Pypi供更多 ...

  7. Python 库打包分发(setup.py 编写)

    Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python 包.要想向 pypi 包仓库提交自己开发的包,首先要将自己的代码打包,才能上传分发. distutil ...

  8. python文件分发_python 写一个文件分发小程序

    一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...

  9. python打包工具报错_Python打包发布神器—Pyinstaller

    一前言 在windows平台学习python的过程中,你肯定会遇到需要把.py脚本打包成.exe的情形,如此,至少有两方面的好处:第一,你的代码保密性更好,其他人不能直接看到python代码:第二,打 ...

最新文章

  1. 代码整洁之道----读书笔记
  2. Spring学习笔记--spring+mybatis集成
  3. HTTP协议超级详解
  4. 【Leetcode】二分法左侧边界右侧边界模板
  5. [PHP] 现代化PHP之路:composer的镜像站设置
  6. php代码时间控制,PHP 网页过期时间的控制代码
  7. pycharm git工具与coding.net结合
  8. Atitit.uml2 api 的编程代码实现设计uml开发 使用eclipse jar java 版本
  9. 前端 html h5 移动端 手机端 仿ios左滑删除效果
  10. Oracle数据库的四款工具软件
  11. 数电第二版 潘松 陈龙 第一章 答案
  12. AI产品经理必懂的硬知识(一):应用领域篇
  13. excel 置信区间 计算_正态分布置信区间Excel计算公式.ppt
  14. ping 127.0.0.1和ping本地ip、ping网关、ping远程网站分别测试什么
  15. 闲人闲谈PS之三十——新收入准则中的合同资产和合同负债
  16. 基于centos8部署nextcloud+onlyoffice----2021-07-16
  17. winform制作音乐播放器
  18. 你明明是我师父,却偏要做我女朋友
  19. Mac无法找到摄像头问题解决
  20. 数字化营销,为何网站如此重要?

热门文章

  1. 十大经典预测算法(八)---adboost
  2. K8s跟Docker的关系
  3. 时序竟态条件分析 sigsuspend函数 Linu系统编程
  4. uni-app 实现轮播图(完整版)
  5. JS中~偏移量设定方式与案例分析
  6. java8 优化嵌套循环
  7. Android usb驱动模块 g_android.ko rmmod issues
  8. python 每天发一次通知_Python开发企业微信机器人每天定时发消息实例
  9. 种太阳五联益生菌教你如何正确给孩子吃益生菌
  10. android oncreate添加代码出错',android – requestFeature()必须在super.onCreate添加内容错误之前调用...