千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 4个Python项目管理与构建工具,建议收藏

4个Python项目管理与构建工具,建议收藏

来源:千锋教育
发布人:syq
时间: 2022-09-16 11:02:38 1663297358

  Python 历时这么久以来至今还未有一个事实上标准的项目管理及构建工具,以至于造成 Python 项目的结构与构建方式五花八门。这或许是体现了 Python 的自由意志。

Python项目管理与构建工具

  不像 Java 在经历了最初的手工构建,到半自动化的 Ant, 再到 Maven 基本就是事实上的标准了。其间 Maven 还接受了其他的 Gradle(Android 项目主推), SBT(主要是 Scala 项目), Ant+Ivy, Buildr 等的挑战,但都很难撼动 Maven 的江湖地位,而且其他的差不多遵循了 Maven 的目录布局。

  回到 Python,产生过 pip, pipenv, conda 那样的包管理工具,但对项目的目录布局没有任何约定。

  关于构建很多还是延续了传统的 Makefile 的方式,再就是加上 setup.py 和 build.py 用程序代码来进行安装与构建。关于项目目录布局,有做成项目模板的,然后做成工具来应用项目模板。

  下面大概浏览一下四个工具的使用

  CookieCutter

  PyScaffold

  PyBuilder

  Poetry

  CookieCutter 一个经典的 Python 项目目录结构

1

  最后由 cookiecutter 生成的项目模板是下面的样子:

2

  这大概是当前比较流行的目录结构的主体框架,主要元素是:

3

  项目 sample 目录中重复 sample 目录中放置 Python 源文件,tests 目录中是测试文件,再加一个 docs 目录放文档,README.rst, 其他的用于构建的 setup, setup.cfg 和 Makefile 文件。

  这其实是一个很经典的 Python 项目结构,接下来的构建就用 make 命令了,输入 make 会看到定义在 Makefile 文件中的指令

4

  为使用上面的构建过程,需要安装相应的包,如 tox, wheel, coverage, sphinx, flake8, 它们都可以通过 pip 来安装。之后就可以 make test, make coverage, make docs,make dist 等。其中 make docs 可以生成一个很漂亮的 Web 文档。

  PyScaffold 创建一个项目

  PyScaffold 顾名思义,它是一个用来创建 Python 项目脚手架的工具,安装和使用:

5

  这样创建了一个 Python 项目,目录结构与前面 cookiecutter 所选的模板差不多,只不过它把源文件放在了 src 目录,而非 sample 目录。

6

  整个项目的构建就要用 tox 这个工具了。tox 是一个自动化测试和构建工具,它在构建过程中可创建 Python 虚拟环境,这让测试和构建能有一个干净的环境。

  tox -av 能显示出定义在 tox.ini 中所有的任务:

7

  要执行哪个命令便用 tox -e build, tox -e docs 等

  在我体验 tox 命令过程中,每一步好像都比较慢,应该是创建虚拟机要花些时间。

  PyBuilder

  最好再看另一个构建工具 PyBuilder, 它所创建出的目录结构很接近于 Maven, 下面来瞧瞧

8

  完后看下它的目录结构:

9

  构建过程仍然是用 pyb 命令,可用 pyb -h 查看帮助,pyb -t 列出所有的任务, PyBuilder 的任务是以插件的方式加入的,插件配置在 build.py 文件中。

10

  PyBuilder 也是在构建或测试之前创建虚拟环境, 从 0.12.9 版开始可通过参数 --no-venvs 跳过创建虚拟环境这一步。使用了 --no-venvs 的话 Python 代码将会在运行 pyb 的当前 Python 环境中执行,所需的依赖将要手工安装。

  项目的依赖也要定义在 build.py 文件中

11

  随后在执行 pyb 创建虚拟环境时就会安装上面的依赖,并在其中运行测试与构建。

  Poetry

  最后一个 Poetry, 感觉这是一个更为成熟,项目活跃度也更高的 Python 构建,它有着更强大的信赖管理功能,用 poetry add boto3 就能添加依赖,poetry show --tree 显示出依赖树。看下如何安装及创建一个项目

12

  它创建的项目比上面都简单

13

  如果给 poetry new 带上 --src 参数,那么源文件目录 sample 会放在 src 目录下,即 sample/src/sample.

  poetry init 会在当前目录中生成 pyproject.toml 文件,目录等的生成需手动完成。

  它不关注文档的生成,代码规范的检查,代码覆盖率都没有。它的项目配置更集中,全部在 pyproject.toml 文件中,toml 是什么呢?它是一种配置文件的格式 Tom's Obvious, Minimal Language

  pyproject.toml 有些类似 NodeJS 的 package.json 文件,比如 poetry add, poetry install 命令的行

14

  其他主要的

15

  poetry run 能执行任何系统命令,只是它会在它要的虚拟环境中执行。所以可以想见,poetry 的项目要生成文档或覆盖率都必须用 poetry run ... 命令来支持 sphinx, coverage 或 flake8。

  在 sample 目录(与 pyproject.toml 文件平级)中创建文件 my_module.py, 内容为

16

  然后在 pyproject.toml 中写上

17

  再执行

18

  就会输出 "hello poetry"。 通过对以上四个工具的认识,项目结构的复杂度由 cookiecutter-pyproject -> PyScaffold -> PyBuilder -> Poetry 依次降低,使用的难度大略也是相同的顺序。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区