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