寻找完美的工具包:分析流行的Python项目模板

该材料(我们今天发布的翻译)专用于有关用于创建Python应用程序的工具的故事。它是为那些已经离开初学者类别但尚未达到经验丰富的Python开发人员类别的程序员设计的。 对于那些渴望开始练习的人,作者建议在现有的Python项目中使用Flake8pytestSphinx他还建议您看一下pre-commitBlackPylint那些计划开始一个新项目的人,他建议注意诗歌Dependabot





总览


对于Python开发的“最佳实践”,我一直很难形成客观的看法。在技​​术世界中,一些流行趋势正在不断出现,通常不会长期存在。这使从信息噪声中提取“有用信号”变得复杂。

可以这么说,最新鲜的工具通常只是纸上谈兵。他们真的可以帮助实际的程序员做什么吗?还是它们的应用只会导致项目中引入一些新事物,必须保持其性能,而带来的困难多于收益?

我对我究竟认为开发的“最佳实践”没有清晰的了解。我想我发现了一些有用的东西,主要是基于“实用性”的偶然证据,并且偶尔在对话中提到这一点。在过去的几周中,我决定将这件事整理得井井有条。为此,我开始分析我可以找到的所有Python项目模板(我们正在谈论cookiecutter命令行实用程序用来基于它们创建Python项目的模板)。

在我看来,找出模板作者认为值得将这些工具用于基于这些模板创建的新Python项目中的哪种辅助工具非常有趣。

我分析并比较了18个最受欢迎的模板项目(在GitHub上从76颗星到6300颗星),并特别注意它们使用哪种辅助工具。该分析的结果可以在表中找到

下面我想分享我在分析流行模板时得出的主要结论。

事实标准


本节中讨论的工具包含在一半以上的模板中。这意味着它们在许多实际的Python项目中被视为标准。

▍片状8


我使用Flake8已经有一段时间了,但是我不知道该工具在棉绒领域的主导地位。我以为它存在于某种竞争中,但是绝大多数项目模板都使用它。

是的,这不足为奇。很难在几秒钟内就反对将项目的整个代码库替换为整件事。那些想使用前沿开发的人可以推荐一下wemake-python-styleguide这类似于“类固醇中的Flake8”。该工具很可能有助于将过时的其他类似工具(例如Pylint)转移到类别中。

yPytest和coverage.py


绝大多数模板使用pytest这减少了标准单元测试测试框架的使用。当联合Pytest看起来更具吸引力TOX大约一半的模板就是这样做的。测试的代码覆盖率通常是使用coverage.py检查的

▍狮身人面像


大多数模板使用Sphinx生成文档令我惊讶的是,MkDocs很少用于此目的。

结果,我们可以说,如果您在当前项目中不使用Flake8,pytest和Sphinx,则应考虑引入它们。

有前途的工具


在本节中,我收集了这些工作工具和技术,在模板中使用这些工具和技术表明了一些趋势。关键是,尽管所有项目模板中都没有出现所有这些内容,但在许多最近的模板中都可以找到它。所以-所有这些都值得关注。

yPyproject.toml


pyproject.tomlPEP 518中建议 使用文件这是用于指定项目组装要求的现代机制。大多数最年轻的模板都使用它。

▍诗歌


尽管Python生态系统在管理依赖关系方面不是很好的工具,但我持谨慎乐观的态度相信,诗歌可能会成为Python世界中JavaScript世界中npm的类似物

最年轻(但仍然很流行)的项目模板似乎与这种矿井概念一致。的确,值得一提的是,如果有人正在研究某种可以通过PyPI分发的库,那么他仍然必须使用setuptools。 (应该指出的是,在发布此材料后,我被告知显然这不再是问题)。

另外,请注意,如果您的项目(依赖项也一样)依赖于Conda在这种情况下,Poetry将不适合您,因为此工具以当前形式将开发人员绑定到pipvirtualenv

▍Dependabot


Dependabot会定期检查项目依赖项是否过时,并尝试通过自动打开PR来帮助开发人员。

就我个人而言,最近我比以前更常使用此工具。在我看来,它是一个出色的工具,将其添加到项目中会对项目产生非常积极的影响。Dependabot通过推动开发人员保持依赖关系的最新状态来帮助降低安全风险。

因此,我建议您不要忽视诗歌和Dependabot。考虑将这些工具引入下一个项目。

个人推荐


对项目模板的分析使我对本节中列出的工具有些矛盾。无论如何,我都想根据自己的经验使用本节来讨论它们。一次,它们对我非常有用。

▍预提交


即使您受过严格训练-也不要在执行简单的例行操作上浪费精力,例如在将代码发送到存储库之前通过linter运行其他代码。可以将类似的任务传递给Pre-commit而且,最好将精力花在TDD和代码团队上。

yl皮林特


尽管批评Pylint的速度很慢,但是尽管批评该工具的设置功能,但我可以说它使我在编程领域超越了自我。

他对我可以改进的代码部分提供了具体说明,并告诉我如何使代码更好地符合规则。对于免费工具而言,仅此一项已经非常多了。因此,我准备忍受与Pylint相关的不便。

▍黑色


关于在代码中何处放置空格的争论的根源是黑人。这样可以保护我们的团队免于空谈以及避免因不同的编辑器设置而导致的文件无意义的差异。

就我而言,这增强了我个人在Python中不喜欢的东西(需要使用很多空格)。此外,应该指出的是,Black项目于2019年加入了Python Software Foundation,这表明该项目的重要性和质量。

因此,我想说的是,如果您仍然不使用“预先提交”,Black和Pylint,请考虑一下这些工具是否可以使您的团队受益。

小计


使用cookiecutter框架创建了18个调查模板中的12个。其中一些未使用此框架的模板具有有趣的品质。

但是,鉴于cookiecutter是创建项目模板的主要框架,因此那些决定使用不使用cookiecutter的模板的人应该有充分的理由。这样的决定应该是很合理的。

那些正在为其项目寻找模板的人应该选择与自己的事物视图最匹配的模板。如果您根据某个模板创建项目时,经常不得不以相同的方式重新配置它们,请考虑如何从我的清单中的模板示例中汲取此类模板并对其进行优化。

而且,如果您喜欢冒险- 从头开始创建自己的模板。Cookiecutter是Python生态系统的重要功能,创建Jinja模板的简单过程使您可以快速轻松地自己做某事。

奖励:模板建议


▍Django


与最受欢迎的Django模板一起,考虑使用wemake-django-template它给人以深思熟虑的产品的印象。

▍数据处理与分析


在大多数旨在处理和分析数据的项目中,Cookiecutter数据科学模板很有用但是,数据科学家还应该研究Kedro

该模板通过创建标准化数据处理管道的机制扩展了Cookiecutter数据科学。它支持加载和保存数据和模型。这些功能很可能能够在您的下一个项目中找到有价值的应用程序。

在这里,我还要感谢shablona模板的创建者准备了非常高质量的文档。即使您最终选择其他东西,它也可能对您有用。

▍通用模板


选择某种通用模板以某种方式取决于您将基于该模板(库或常规应用程序)确切开发什么。但是,我选择了一个类似的模板以及此类最受欢迎的项目,将非常仔细地研究Jace的Python模板

这不是一个众所周知的模式,但是我喜欢它具有Poetry,isort,Black,pylint和mypy的事实

PyScaffold是最流行的非cookiecutter模板之一。它具有许多扩展(例如,适用于Django和Data Science项目)。它还使用setuptools-scm从GitHub下载版本号。此外,这是支持Conda的少数模板之一。

以下是几个使用GitHub Actions技术的模板:

  1. Python的最佳实践18.11模板,其中,我要指出,最有我最喜欢的工具。
  2. 我发现Python蓝图/样板模板非常有趣,因为它为他们提供了使用Bandit查找常见安全问题的机会看起来很有希望。此外,该模板具有显着的功能,其特征在于所有工具的设置都收集在一个文件中setup.cfg

最后-我建议看一下wemake-python-package模板我认为还是值得这样做。特别是-如果您喜欢同一开发人员的Django模板,或者要使用高级的wemake-python-styleguide而不是纯Flake8。

摘要


发表这篇文章后,我写了Guido van Rossum关于它的文章。

也许您和我一样会对他的评论感兴趣他说我忘了mypy,而且与Sphinx而不是Markdown一起工作更容易。关于Black,他指出该工具被高估了,并且只有在团队成员对样式争论不休时才能受益。据他介绍,那些使用Flake8的人不需要Pylint。他没有听说过诗歌和Dependabot。此外,他建议使用特定的CI解决方案(例如Travis-CI)来运行测试。

亲爱的读者们!您使用什么Python项目模板?


All Articles