下面是由社区开发者——王方浩提供的文章,本文主要介绍 Python打包发布。

关于作者

王方浩,社区布道师,武汉大学电子信息专业,先后在华为和阿里从事固件、驱动、操作系统和后台相关的开发工作,目前主要从事L4级别自动驾驶的开发,喜欢研究技术,分析源码和解答问题,目前活跃于Apollo自动驾驶开源社区,平时喜欢做一些户外运动,对自动驾驶的前景担心的同时又充满激情,“莫愁前路无知己,天下谁人不识君”,希望更多的人一起!

ENJOY THE FOLLOWING
本文将主要从以下几个方面来介绍:

包(package)和模块(module)

打包

安装

统计信息

参考

概览

Python由于其灵活性和丰富的库,使用起来非常方便,在这里主要介绍Ppython的包管理机制,包括Python包的组织架构,如何打包和发布Python包,以及PIP的使用。

包和模块

Python的包是一些系列功能的合集,而模块则是单个或者几个模块,包通常的形式是

package
init.py
a.py
b.py

这里的init.py是必须的,来标识这是一个Package,之后就可以通过Import的方式引用了。

而模块(Module),可以是单个或者几个文件,通过在setup.py 中py_modules关键字来进行指定。

打包

Python通过setup.py 或setup.cfg 进行打包,打包之后的文件在Dist目录中,其中setuptools默认会添加以下几种文件:

all Python source files implied by the py_modules and packages setup() arguments

all C source files mentioned in the ext_modules or libraries setup() arguments

scripts specified by the scripts setup() argument

all files specified by the package_data and data_filessetup() arguments

the file specified by the license_file option in setup.cfg (setuptools 40.8.0+)

all files specified by the license_files option in setup.cfg (setuptools 42.0.0+)

all files matching the pattern test/test*.py

setup.py (or whatever you called your setup script)

setup.cfg

README

README.txt

README.rst (Python 3.7+ or setuptools 0.6.27+)

README.md (setuptools 36.4.0+)

pyproject.toml (setuptools 43.0.0+)

MANIFEST.in

如果要添加其它类型的文件,例如数据库文件,图片文件等,可以在package_data中进行添加 。

如果要添加库依赖,例如Python依赖于某个c++的So文件,可以通过Extension进行添加,在打包的时候,Python会编译其中的 .c文件,然后一起打包。

实际上由于Python是解析性语言,打包之后的文件只是拷贝并且解压到Python指定的库安装目录,由于库的路径已经加入了sys.path因此就可以调用这些库了。

命令行
如果你需要安装一个Python命令(通过命令行输入命令并且执行),setuptools提供了entry_points 来指定输入命令之后运行的函数,还可以结合argparse进行参数解析,这样就可以实现python命令安装了。

包上传
打包好的文件,要上传到PYPI网站进行托管,上传之后,其它人就可以通过pip来安装对应的软件包,并且使用了。Python官方提供了twine命令来上传包,在使用之前,首先需要注册pypi的账号,然后上传,上传之前需要输入PYPI的账号和密码。

twine upload dist/*

之后就可以在PYPI网站上看到上传的包了,还可以在PYPI网站管理。注意上传的软件包的版本不能重复上传,请节省版本号。也可以通过Github Action和PYPI结合,实现在Github上自动发布版本。

安装

Python通过pip命令来安装软件包,安装完成之后,就可以通过Import模块的方式,或者命令行的方式来使用安装包了。

pip既可以通过远程仓库安装,也可以通过本地安装,本地安装主要是用于没有网络或者测试的时候,远程安装是正式发布版本。

安装依赖
Python的安装依赖在上面说的setup.py中的install_requires进行指定,安装的时候,pip会主动下载并且安装这些依赖。

卸载
Python通过pip uninstall来卸载Python安装包,只会卸载自己,并不会卸载依赖项。

统计信息

由于pypi不提供python库的下载次数,可以通过以下网站来查询库的历史下载次数。

https://pepy.tech/

本文部分内容参考链接

《Writing the Setup Script》
https://docs.python.org/3/dis...

《Distributing a Python command line application》
https://gehrcke.de/2014/02/di...

《Python打包发布》
https://zhuanlan.zhihu.com/p/...


百度开发者中心
24 声望10 粉丝

百度开发者中心是一个面向开发者的知识分享平台,专注于为开发者打造一个有温度的技术交流社区,开发者通过平台来分享知识、相互交流。