最新新闻,最快送达

NPM作为Python项目的构建工具

  • 发布时间:2020-10-14
  • 来源:中培教育网

  Python是一种功能强大的语言,个人比较喜欢python。但是一直觉得python缺少了一些东西。就像你从来没有约会过的漂亮女孩。与使用带有npm的NodeJ的项目相比,为中型到大型Python项目设置工作环境确实非常困难,接下来让我们来探讨几种可以使用npm帮助python解决此问题的方法。

  1.执行脚本

  每个NodeJs项目都有一个package.json文件。您可以在一个文件中定义从版本到依赖关系,脚本到自定义配置的所有内容。运行脚本非常简单,

  npm运行<脚本名称>

  与Python相比有什么不同?

  python中用于设置项目的一个标准选项是setuptools软件包。基本的元数据配置(例如名称,版本和作者)很简单。它还提供了许多复杂的选项,例如cmdclass和scripts。但是,即使是简单的操作(例如删除一些自动生成的文件)也相当困难。

  例如,假设您需要coverage/在运行测试套件后删除目录中的所有文件。在python中,如果要自动执行此任务,则需要做几件事。

  1). cmdclass在setup.py(setuptools正在使用的地方)下添加一个条目

  2). 编写一个新的Python类扩展distutils.command基类

  3). 编写一个python代码,该代码将用于subprocess.Popen执行所需的命令。

  "clean_cov": "rm -rf coverage/*"与在package.json文件中添加一行条目相比,这需要大量的工作。这里的另一个好处是,您可以链接npm命令来耦合任务。

  "clean_cov": "rm -rf coverage/*",

  "test": "python setup.py测试",

  "test_and_clean": "npm run test && npm run clean_cov"

  您还可以添加pre和post脚本来定义流程。上面的代码可以写成

  "test": "python setup.py测试",

  "posttest": "rm -rf coverage/*",

  另一方面,我对将一些构建命令集成到项目的源代码感到不舒服。

  2.配置git hooks

  我个人认为pre-commit和pre-push git钩子是git存储库的重要元素。这些是无名英雄,可以避免对存储库的意外提交,从而有助于使用干净的提交维护干净的存储库。

  在我正在从事的项目中,我们计划有与以下检查相对应的挂钩。

  1). 运行pylint检查并评估目标文件的pylint分数;

  2). 运行pytest并确保所有测试都通过;

  3). 避免承诺掌握和发展分支机构;

  4). 确保没有禁止的单词;

  5). 创建源发行版,并确保没有构建错误。

  只有5个,还有更多支票。显然,手动运行这些检查不是一种选择。所以我需要配置钩子。

  我发现了几个pip包,包括git-pylint-hook,git-pre-push-hook和pre-commit,它们似乎可以满足我的要求。但是我找不到的任何库都没有适当的文档。自定义插件似乎是一场噩梦。

  我甚至觉得手动编写一些shell脚本比找到合适的python插件容易。

  现在,让我们看看如何在package.json文件存在的情况下完成此操作。

  我找到了这些用于工作的预提交和预推送库。由于我已经在程序包中包含用于运行上述检查的自定义脚本,因此我要做的就是安装库并将相关条目添加到package.json文件中。例如,我将预推挂钩配置如下,

  “ pre-push”:[

  “ git-branch”,

  “ forbidden-words”,

  “ pylint”,

  “ test”,

  “ build”

  ]

  现在,这很容易吧。我还要在这里强调pre和post脚本也可以在这里工作。但是,对于我们的项目,我们希望明确指定检查。

  3.观看模式

  为了解释为什么需要此功能,我首先要提到我使用intelliJ PyCharm作为编写Python代码的IDE。我希望在不久的将来看到pycharm中缺少的一项功能,它是有关IDE中pylint问题的实时反馈。

  在他们将该功能添加到pycharm中之前,我最好的选择是将pylint配置为外部插件,并在更新python文件之前手动运行它。

  但是,有了我的救主的帮助package.json,这变得容易了。在NPM-手表库(和其他类似的库)为我们提供了观看在给定的目录中的特定文件类型更改,然后执行一个脚本NPM的选择。

  例如,我们可以有一个如下所示的条目,以便在每次.py更改时运行pylint 。

  “ watch”:{

  “ pylint”:{

  “ patterns”:[

  “ app / ** / *”,

  “ utils / ** / *”

  ],

  “ extensions”:“ py”,

  “ quiet”:true

  }

  }}

  最后的想法

  尽管我真的很喜欢package.json在python项目仓库中有一个文件,但是我收到了这种方法的混合反馈。一些开发人员对此不以为然,认为这种方法不是python。

  我个人没有发现不是python的问题,因为我认为工程师应该与技术无关,所有这些语言仅仅是完成某些工作的工具。尽管如此,为了尊重所有队友的需求,我在不使用npm的情况下配置了此仓库中提到的所有基本内容。想了解更多关于python的问题,请继续关注中培教育。

近期开班

phone
全国报名服务热线: 400-626-7377
合作伙伴
  • 国际APMG组织
  • 思科(Cisco)
  • 国际OPEN GROUP组织
  • 国家外专局培训中心
  • 上海银行
  • 中国石油管道局工程有限公司
  • 朗新科技
  • 中国国家博物馆
金牌客户
  • 中国石油天然气集团公司
  • 中国农业银行
  • 中国建设银行
  • 波司登集团
  • 浙江移动
合作机构
  • 美国项目管理协会
  • 人力资源和社会保障部
  • 中华人民共和国工业和信息化部
  • 中国计算机技术职业资格网
  • CITIF中国电子信息行业联合会
  • PEOPLECERT
微信公众号
公众号

微信号:zpitedu

  • 中培教育 Copyright © 2006-2020 北京中培伟业管理咨询有限公司 .All Rights Reserved
  • 京ICP备13024721号  gonganimg  京公网安备11010602007294号  增值电信业务经营许可证:京B2-20201348  全国统一报名专线:400-626-7377