上面是由社区开发者——王方浩提供的文章,本文次要介绍 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/...