python打包本地pip包需要注意哪些问题

发布时间 2023-11-30 17:13:47作者: 思念殇千寻

  参考资料:

  https://packaging.python.org/tutorials/packaging-projects/

  提到Python的包管理器,大多数人都会想到pip和conda,其中又尤以pip简单好用。那么如果有一天你写了一个有用的项目,想要发布给公众,或者实现方便的安装,那么你可能就会想要自己去打包一个pip包。毕竟,若用户安装你的项目只需要简简单单的pip install XXX命令该多好。

  参考资料是python的官方示例,其中介绍了如何打包一个示例的python package,本人觉得没有必要再重复一遍打包的具体过程(因为不同的项目有不同的情况,多见多参考才能融会贯通),下面会重点说明一些关键问题,如果能解决读者的一些疑惑就最好了。

  1. 我们打包一个软件,最终的目的是什么?产出是什么?

  不妨到pypi官网上看一看一个pip项目里有什么。

 

  答:一个tar.gz包,一个whl包。前者是源代码包,后者是build好的分发。The tar.gz file is a Source Archive whereas the .whl file is a Built Distribution. 

  在我看来,python项目目前的主流setup手段是通过一个叫做setuptools的东西,你可能有一堆有用的代码,或者你有一些已经在特定平台下编译好的二进制文件。那么你需要setuptools来规范地将你的项目安装到python内核中,这类似于一个流水线的过程。pip build负责进行编译(如果需要),打包。pip build之后就会生成whl和tar.gz。然后pip install,将python packages, modules, bin等东西放到你的环境中,好让你的内核找的到。

  2. 我们打包的过程中需要提供什么,注意什么?

  官网的教程中其实说的比较详细了,但是仍需要具体问题具体分析,通常意义来讲,下面这些东西是必须的。

  LICENSE

  打包的指令

  python setup.py sdist bdist_wheel


  2023年11月30日更新!!!

  上面的的资料虽然可能仍然正确,但是目前的一个项目里,setup.py不再是必须的。现在,一个现代化的pip包里面应该包含一个pyproject.toml。具体怎么设置看参考资料即可,项目文件夹组织如下: