以下是社区开发者王方豪提供的文章。本文主要介绍Python打包发布。作者简介王方浩,社区布道师,武汉大学电子信息专业,先后在华为、阿里工作,先后从事固件、驱动、操作系统、后台开发。目前主要从事L4级自动驾驶开发。喜欢研究技术、分析源码和解答问题,目前活跃于Apollo自动驾驶开源社区。我平时喜欢做一些户外运动。我担心自动驾驶的前景,但也充满激情。一起!ENJOYTHEFOLLOWING本文将主要介绍以下几个方面:packageandmodule打包安装统计信息参考概述Python的灵活性和丰富的库使其使用起来非常方便。这里主要介绍Ppython的包管理机制,包括Python包的组织结构,如何打包分发Python包,以及PIP的使用。包和模块Python包是一系列函数的集合,而模块是单个或多个模块。package通常的形式是packageinit.pya.pyb.py...这里需要init.py来标识它是一个Package,然后可以通过Import来引用。模块(Module)可以是单个或多个文件,由setup.py中的py_modules关键字指定。打包Python通过setup.py或setup.cfg进行打包,打包后的文件在Dist目录下。默认情况下,Setuptools将添加以下文件:py_modules和packagessetup()arguments隐含的所有Python源文件ext_modules或库setup()arguments中提到的所有C源文件scriptssetup()arguments指定的所有文件package_data和data_filessetup()arguments由setup.cfg(setuptools40.8.0+)中的license_file选项指定的文件由setup.cfg(setuptools42.0.0+)中的license_files指定选项指定的所有文件(setuptools42.0.0+)所有匹配模式test/的文件test*.pysetup.py(或任何你称之为安装脚本的东西)setup.cfgREADMEREADME.txtREADME.rst(Python3.7+或setuptools0.6.27+)README.md(setuptools36.4.0+)pyproject.toml(setuptools43.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账号和密码。twineuploaddist/*后在PYPI网站上可以看到上传的包,也可以在PYPI网站上进行管理。注意上传的软件包版本不能重复上传,请保存版本号。也可以通过GithubAction和PYPI的结合,在Github上自动发布版本。安装Python通过pip命令安装软件包。安装完成后,您可以通过导入模块或命令行使用安装包。pip既可以通过远程仓库安装,也可以在本地安装。本地安装主要是在没有网络或者测试的时候使用,远程安装是正式发布的版本。安装取决于Python的安装。安装依赖于上面提到的setup.py中的install_requires。安装时pip会主动下载并安装这些依赖。卸载Python通过pipuninstall卸载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/...
