Python CookieCutter:增强开发人员体验的流线模板项目
#初学者 #python #devops #developers

Photo by Pavel Danilyuk: [https://www.pexels.com/photo/close-up-shot-of-unbaked-cookies-6996345/](https://www.pexels.com/photo/close-up-shot-of-unbaked-cookies-6996345/)

Python Cookiecutter库通过提供精简的方法来创建模板项目和改善开发人员体验来彻底改变项目开发。

CookieCutter允许开发人员使用预定义的结构,配置和最佳实践来快速脚步脚本。

通过抽象环境设置的复杂性,CookieCutter使开发人员能够直接潜入编码,从而大大减少了启动和运行所需的时间和精力。将CookieCutter作为一种有价值的工具可以彻底改变入门体验,提高生产力,并使开发人员能够专注于他们最擅长的工作:构建创新和高质量的软件。

在这篇文章中,您将学习如何使用CookieCutter生成Python模板并从头开始构建新的模板项目。我们将查看用法示例并遵循精确的步骤,以帮助您开发CookieCutter Python模板项目。

[https://www.ranthebuilder.cloud/](https://www.ranthebuilder.cloud/)

此博客文章最初发表在我的网站“Ran The Builder.”

开发人员的经验和模板项目很重要

我会说模板项目对您的组织的成功至关重要。

在我的组织中,我们正在采用一项新技术:无服务器。

我当时正在一个开创性的小组,为学习这项新技术的绳索而努力。最终,我们建立了一项新的无服务器服务,具有许多最佳实践,例如基础架构,例如代码(AWS CDK),专用的CI/CD管道以及内置的可观察性。

这是一项出色的服务,效果很好。

但是,现在团队面临着新的挑战:建立第二次服务和另一个挑战,甚至更加困难:帮助赛伯拉克的新闻团队使用相同的工具创建相同级别的无服务器服务。那是模板项目派上用场的地方。

我们将第一个服务(即最先进的服务)变成了模板项目 - 一个简单而通用的足够的服务,以便任何团队都可以将其用作起点。这是一个完全有效的存储库,所有的铃铛和哨声都可以帮助开发团队专注于最重要的业务领域。阅读有关here的更多信息。

在一个实例中,一个使用模板开发无服务器服务的团队可以在短短四个月内进入设计合作伙伴的阶段(当实际客户使用该服务时)。对于诸如赛博拉克等企业,这是闻所未闻的,而且非常快。

现在,我们了解了模板项目的激励措施,让我们从使用CookieCutter的模板生成新的存储库,然后处理我们的模板。

安装CookieCutter

首先,请确保安装python3。

然后,运行以下命令:

PIP安装CookieCutter

或Mac上:

酿造CookieCutter

如果您需要更多帮助,请阅读正式安装guidelines

cookicutter-用户体验

在创建模板之前,我们应该了解开发人员将获得什么样的用户体验。我们应该努力使其简单,快速和删除尽可能多的手动步骤。

创建新的开发人员环境是开发人员经常面临的最复杂挑战之一。我们可以使用CookieCutter来构建我们的项目并在“挂钩”部分中建立更多有关开发人员的环境。

让我根据我的AWS lambda处理程序project创建一个新的无服务器服务。

无服务器服务模板具有许多功能:

  • 带基础架构测试和安全测试的CDK基础架构。

  • CI/CD管道基于GitHub动作,该操作用Python Linters部署到AWS,复杂性检查和样式格式化。

  • 简单开发人员体验的makefile。

  • AWS lambda处理程序体现了无服务器的最佳实践,并具有适当生产准备好的处理程序的所有铃铛和哨子。

  • aws lambda处理程序3层体系结构:处理程序层,逻辑层和数据访问层。

  • 基于AWS AppConfig的标志和配置。

  • 单元,基础架构,安全性,集成和E2E测试。

和架构图:

service design

设置

运行此命令:

CookieCutter GH:Ran-Isenberg/CookieCutter-Serverless-Python

回答以下问题以脚打脚本:

answer the questions

cookieCutter将开始踩踏项目并初始化工作环境。

完成后,将会显示一条消息:项目成功初始化。

就是这样!很简单,您可以开始开发闪亮的新无服务器服务并将其部署到AWS。

如果您喜欢这个项目和经验,请不要成为一个陌生人,并给它一个star:)

创建自己的模板

现在我们了解了要实现的目标,让我们建立它。

存储库结构

从一个空存储库开始。您需要在项目的最高级别添加四个文件:

  1. readme文件 - 解释项目的目的并提供设置说明。

  2. cookieCutter.jsonâjson – cookieCutter为克隆新项目时要使用的配置和脚手架参数。

  3. 您希望提供的模板项目的根文件夹。

  4. 用于高级用例的挂钩文件夹;参见下文。

因此,您最终得到了这样的宽松的东西:

folder structure

让我们浏览主文件夹,挂钩文件夹和cookieCutter.json文件。

CookieCutter.json

在此文件中,您定义了CookieCutter的脚手架参数,这些参数会影响初始设置期间给用户提出的问题。您可以选择任何想要的东西,但是我将以下示例作为起点:


如果用户按Enter作为答案,则提供的值默认值默认,并且不提供其他输入。

_copy_without_renderâ部分有助于添加您不希望CookieCutter的文件和文件夹,然后按原样复制。

作者,电子邮件和描述零件可以注入模板readme文件和诗歌。TOML说明部分。

请参见一个示例herehere

也支持here所述的多选择选项。

主模板文件夹

这是您的模板项目的输入文件夹。您必须将其重命名为CookieCutter可以识别和脚手架的名称。下面的所有文件将被添加和脚手架。

在模板中,我将其重命名为{cookiecutter.repo_name}}}。请注意,repo_nameâ是cookieCutter.json文件中定义的参数。

通常,在主文件夹下,您将另一个文件夹添加给服务名称,我将其定义为{{cookiecutter.service_name}}

这样看起来可以这样:

inner project structure

并非所有文件夹都需要脚手架支持,您可以决定哪些文件夹保持恒定并更名。

请注意,内部文件夹如何具有.toml文件用于诗歌,.github用于CI/CD Workfrows,用于部署的CDK文件夹,测试文件夹和其他必需的文件夹。您可以添加您想要的任何东西。

您必须知道的一个至关重要的问题是,脚手架的突破是Python的进口路径。由于主文件夹是动态的,在回答CookieCutter问题时由用户确定,这意味着Python Import Path声明也需要我们编辑它们。

这是您如何克服它的一个例子:


请注意第10行,以及我们如何在脚手架支持下导入文件。

可以找到完整的文件here

您可以使用方法来重命名任何文件中的任何值。

挂钩文件夹

挂钩文件夹是可选的,但我建议您也实现它。

挂钩是在CookieCutter重命名过程之前或完成后运行的代码。

您可以使用它来对问题进行输入验证,并在项目脚手架后建立整个开发人员环境。

前钩

您可以使用Pre-Hook进行用户字符串的输入验证。如果您还记得,其中一些字符串用作服务或存储库名称。它们用于生成的存储库文件的导入路径中,因此它们必须符合Python的命名约定。

您可以使用以下示例:

挂钩

这是魔术发生的地方。我们谈论了很多开发人员体验的重要性,帖子挂钩是您可以有所作为的。

您可以编写脚本并初始化开发人员环境,以便开发人员可以写入新代码,而不是浪费时间在手动和乏味的环境设置上。

这是我的后钩脚本的一个示例,我初始化git,安装所有诗歌依赖性并安装预启动前签名,以便在PR可以正常工作之前运行所有检查。

在本地进行测试和调试

听起来很简单,对吗?

但是,它第一次对您有效。它永远不会。因此,您需要再次调试,修复和调试。

CookieCutter支持从本地文件夹运行的,而不仅仅是GitHub存储库URL。

您可以在本地开发新的模板存储库,进行更改,然后从终端运行CookieCutter,看看它是否有效:

cookiecutter {path-to-project-on-local-disk}

有关更多提示和技巧,请阅读官方文档:https://cookiecutter.readthedocs.io/en/stable/