Python的打包工具(setup.py)实战篇

简介: 关于如何使用Python的setup.py工具打包Python项目的实战教程。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

  当你写好一个Python项目时,想要开源或者给别的小伙伴使用,这个时候就可以考虑使用打包工具来做这个事情,Python内置的setup.py工具就自带了这个功能,本片博客将带你来打包一个自己写的python项目。

  学会python打包后,可以把自己写好的模块发布到公共的PyPI(https://pypi.org/)上,也可以搭建PyPI私服,供企业内部使用。

  目前PyPI里面的模块没用太好的审核机制,不保证安全,因此要慎重使用。据说,数据分析领域基于python的开源模块在不同的操作系统算出的结果竟然不同,这意味着所有基于该模块的计算发表的论文结果都是不准确的!

一.查找setup帮助文档

1>.找到setup的帮助文档,如下图所示

2>.如下图所示,点击"Distttributing Python Modules(Legacy version)"

3>.如下图所示,点击"Writing the Setup Script"

4>.阅读官网文档

5>.在自己的项目根目录下创建setup.py文件,修改内容如下所示

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @author :yinzhengjie
# blog:https://www.cnblogs.com/yinzhengjie

from distutils.core import setup

setup(
    # 指定项目名称,我们在后期打包时,这就是打包的包名称,当然打包时的名称可能还会包含下面的版本号哟~
    name='devops',
    # 指定版本号
    version='0.1.1',
    # 这是对当前项目的一个描述
    description='Python automatic operation and maintenance platform',
    # 作者是谁,指的是此项目开发的人,这里就写你自己的名字即可
    author='yinzhengjie',
    # 作者的邮箱
    author_email='y1053419035@qq.com',
    # 写上项目的地址,比如你开源的地址开源写博客地址,也开源写GitHub地址,自定义的官网地址等等。
    url='https://www.cnblogs.com/yinzhengjie/p/14124623.html',
    # 指定包名,即你需要打包的包名称,要实际在你本地存在哟,它会将指定包名下的所有"*.py"文件进行打包哟,但不会递归去拷贝所有的子包内容。
    # 综上所述,我们如果想要把一个包的所有"*.py"文件进行打包,应该在packages列表写下所有包的层级关系哟~这样就开源将指定包路径的所有".py"文件进行打包!
    packages=['devops', "devops.dev", "devops.ops"],
)

二.使用setup.py工具对自定义package进行打包操作

1>.查看setup.py工具的帮助信息

python setup.py --help-commands

2>.编译python的包(本质上是新建了一个build目录,而后将指定的packages列表包下的所有".py"文件拷贝过去)

python setup.py build

3>.将源文件进行打包操作

python setup.py sdist

4>.基于我们刚刚打包的文件进行安装

pip install test/dist/devops-0.1.1.tar.gz

5>.卸载咱们刚刚安装的包

pip uninstall devops

三.bdist命令

  bdist命令是一个二进制分发包,或称作安装程序。该命令可以生成模板操作系统的安装程序。

1>.制作windows下的安装包

python setup.py bdist_wininst  # 创建"*.exe"的文件
python setup.py bdist_msi  # 创建"*.msi"的文件
python setup.py bdist --format=msi  # 同样是创建"*.msi"的文件

2>.制作rpm包

python setup.py bdist_rpm  # 创建"*.rpm"的文件,该命令需要在Linux操作系统上执行!
python setup.py bdist --format=rpm  # 同上

3>.制作压缩文件

python setup.py bdist --format=zip  # 创建"*.zip"压缩文件
python setup.py bdist --format=gztar  # 创建"*.tar.gz"文件

四.将python打包成egg包或者whl包(本质上是一个zip文件)

1>.安装wheel模块

pip install wheel

2>.修改"setup.py"文件

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @author :yinzhengjie
# blog:https://www.cnblogs.com/yinzhengjie

# from distutils.core import setup
from setuptools import setup  # 注意哈,setuptools是基于distutils进行封装的,但打wheel包时要从setuptools包导入setup模块哟~
setup(
    # 指定项目名称,我们在后期打包时,这就是打包的包名称,当然打包时的名称可能还会包含下面的版本号哟~
    name='devops',
    # 指定版本号
    version='0.1.1',
    # 这是对当前项目的一个描述
    description='Python automatic operation and maintenance platform',
    # 作者是谁,指的是此项目开发的人,这里就写你自己的名字即可
    author='yinzhengjie',
    # 作者的邮箱
    author_email='y1053419035@qq.com',
    # 写上项目的地址,比如你开源的地址开源写博客地址,也开源写GitHub地址,自定义的官网地址等等。
    url='https://www.cnblogs.com/yinzhengjie/p/14124623.html',
    # 指定包名,即你需要打包的包名称,要实际在你本地存在哟,它会将指定包名下的所有"*.py"文件进行打包哟,但不会递归去拷贝所有的子包内容。
    # 综上所述,我们如果想要把一个包的所有"*.py"文件进行打包,应该在packages列表写下所有包的层级关系哟~这样就开源将指定包路径的所有".py"文件进行打包!
    packages=['devops', "devops.dev", "devops.ops"],
)

3>.打包whl和egg格式,如下图所示

python setup.py bdist_egg  # 打"*.egg"的包
python setup.py bdist_wheel  # 打"*.whl"的包

目录
相关文章
|
4天前
|
调度 开发者 UED
探索Python中的异步编程:从基础到实战
【9月更文挑战第30天】在编程的世界里,异步编程是一个强大的概念,它允许程序在等待某些操作完成时继续执行其他任务。本文将深入探讨Python中的异步编程,从理解其基本概念开始,逐步过渡到高级应用。我们将通过具体的代码示例来展示如何在实际项目中实现异步功能,从而提高应用程序的性能和响应性。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
4天前
|
测试技术 Python
Python MagicMock: Mock 变量的强大工具
Python MagicMock: Mock 变量的强大工具
23 8
|
2天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
|
23小时前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
99 64
|
23小时前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
100 66
|
2天前
|
设计模式 开发者 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第32天】在Python的世界中,异步编程是一种让程序在等待任务完成时不阻塞的技术。本文将通过浅显易懂的方式,带领读者了解异步编程的核心概念、常用库及其在实际项目中的应用。我们将从异步IO的基础知识出发,逐步深入到asyncio库的使用,最后通过一个简易Web服务器的示例,演示如何将理论应用到实践中。文章旨在为初学者提供一个清晰的学习路径,帮助他们掌握Python异步编程的精髓。
|
5天前
|
开发者 Python
探索Python中的列表推导式:一种简洁而强大的工具
【9月更文挑战第29天】在Python的编程世界中,代码的简洁性和可读性总是受到高度赞扬。列表推导式(List Comprehension)作为Python的一个特色功能,不仅能够以简洁的方式生成列表,还能提高代码的执行效率。本文将通过直观的例子和分析,带你深入理解列表推导式的魅力所在,并探讨如何在日常编程中有效利用这一工具来简化代码结构,提升开发效率。
|
7天前
|
机器学习/深度学习 Linux 开发者
Python必备工具:pip的安装与管理
Python必备工具:pip的安装与管理
14 0
下一篇
无影云桌面