1. 程式人生 > 實用技巧 >Cookiecutter: 更好的專案模板工具:(1)簡介及可用資源彙總

Cookiecutter: 更好的專案模板工具:(1)簡介及可用資源彙總

https://www.cnblogs.com/taceywong/p/10506032.html

原文件地址:https://cookiecutter.readthedocs.io/en/latest/

本系列只介紹cookiecutter的基礎使用,而且會刪除與功能使用無關的部分。深度使用及瞭解更多詳情請請參考原文件。

關於Cookiecutter的中文譯名,我不知道別人怎麼翻譯的,我將其翻譯為餅乾製造機。本系列中將不對其作翻譯,直接使用英文原名。

Cookiecutter簡介

Cookiecutter 是一個通過專案模板建立專案的命令列工具。比如,通過Python Package模板來建立Python package專案。(通過Python程式碼呼叫Cookiecutter的API可以擴充套件為自動化建立服務和帶有Web UI的服務程式)

功能特點

  • 跨平臺:官方支援Windows、Mac和Linux
  • 可以在Python 2.7, 3.4, 3.5, 3.6, and PyPy.環境中正常使用(此處指的是Cookiecutter的執行環境,而不是你專案的執行環境。使用Cookiecutter不需要你懂得編寫Python程式碼)
  • 專案模板可以是任何程式語言或標記格式:Python, JavaScript, Ruby, CoffeeScript, RST, Markdown, CSS, HTML等任何你能叫出名字的。你也可以在同一個專案模板中使用多種語言。
  • 命令列的簡單使用:
# 從cookiecutter-pypackage.git模板建立專案
# 你將會被提示輸入相應的值。
# 然後Cookiecutter將基於你的輸入在當前工作目錄中建立Python包
$ cookiecutter https://github.com/audreyr/cookiecutter-pypackage
# 為了簡潔起見,repos在GitHub上可以只使用“gh”字首
$ cookiecutter gh:audreyr/cookiecutter-pypackage
  • 在命令列中使用本地模板:
# 從本地在當前目錄建立專案
# cookiecutter-pypackage/ template
$ cookiecutter cookiecutter-pypackage/
  • 目錄名和檔名可以模板化。例如:{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}.py
  • 支援無限層級的目錄巢狀。
  • 檔案和目錄名稱100%使用Jinja2完成模板化。
  • 只需在·cookiecutter.json·檔案中定義模板變數即可。 例如:
{
    "full_name": "Tacey Wong",
    "email": "[email protected]",
    "project_name": "Complexity",
    "repo_name": "complexity",
    "project_short_description": "令人耳目一新的簡單的靜態網站生成器.",
    "release_date": "2019-03-10",
    "year": "2019",
    "version": "0.0.1"
}
  • 沒有你用·--no-input·來禁止,系統會提示你輸入:
    • cookiecutter.json中鍵/key對應的值/value。
    • cookiecutter.json中的預設值
    • 提示符按順序顯示
  • 跨平臺支援~/.cookiecutterrc檔案:
default_context:
    full_name: "Tacey Wong"
    email: "[email protected]"
    github_username: "taceywong"
cookiecutters_dir: "~/.cookiecutters/"
  • 克隆的Cookiecutter專案模板會預設放置在~/.cookiecutters/目錄下,如果特殊指定,會放置在cookiecutters_dir對應的目錄下:
# 克隆cookiecutter-pypackage
$ cookiecutter gh:audreyr/cookiecutter-pypackage
# 現在你可以根據名字使用對應的模板
$ cookiecutter cookiecutter-pypackage
  • 您可以使用你本地模板、遠端Git repos
  • 預設上下文:指定在生成專案時要用作預設值的鍵/值對
  • 用命令列引數注入額外的上下文:
$ cookiecutter --no-input gh:msabramo/cookiecutter-supervisor program_name=foobar startsecs=10
  • 直接訪問Cookiecutter API允許注入額外的上下文。
  • 預生成和後生成掛鉤/hook:在生成專案之前或之後執行的Python或shell指令碼。
  • 本地專案的路徑可以指定為絕對路徑或相對路徑。
  • 專案始終生成到當前目錄。

可用的Cookiecutter模板

現在在已經有很多開源的Cookiecutter 專案模板可供選擇。

特定的Cookiecutter模板

這些模板由cookiecutter官方團隊進行維護:

Cookiecutter模板分類

社群驅動的各類Cookiecutter模板(非Cookiecutter官方維護)

Python

Python-Django

Python-Pyramid

  • pyramid-cookiecutter-alchemy:Cookiecutter (專案模板),使用SQLite建立Pyramid專案,SQLAlchemy用於ORM,URL排程用於路由,Jinja2用於模板。
  • pyramid-cookiecutter-starter: 使用URL排程進行路由分配,使用Jinjab 2、Chameleon或Mako模板建立Pyramid入門專案的Cookiecutter (專案模板)。
  • pyramid-cookiecutter-zodb:Cookiecutter(專案模板),用於建立Pyramid專案,使用ZODB進行持久儲存,遍歷路由,使用Chameleon進行模板化。
  • substanced-cookiecutter: 用於建立Substance D初始專案的cookiecutter(專案模板)。 Substance D是基於Pyramid實現的。
  • cookiecutter-pyramid-talk-python-starter: 一個自以為是的Cookiecutter模板,用於建立PyramidWeb應用程式,從開發鏈的下游開始。這個cookiecutter模板將建立一個新的Pyramid Web應用程式,其中包含電子郵件,sqlalchemy,rollbar以及更多的整合。

**Cookiecutter (meta) **

用於生成Cookiecutter專案模板的元模板。

Ansible

Git

C

C++

C#

Common Lisp

Elm

Golang

Java

JS

Kotlin

LaTeX/XeTeX

PHP

Sublime Text

Berkshelf-Vagrant

HTML

Data Science

  • widget-cookiecutter: 用於建立自定義Jupyter小部件專案的cookiecutter模板。
  • cookiecutter-data-science:為在Python中進行和共享資料科學工作的邏輯的、合理標準化的、靈活的專案結構。此處提供了的完整文件 。
  • cookiecutter-r-data-analysis: 組織基於R的工作流->doc(通過pandoc)->pdf報告(通過latex)的模板
  • cookiecutter-docker-science: Cookiecutter template for data scientists working in Docker containers.為使用Docker容器工作的資料科學家準備的Cookiecutter模板。

Reproducible Science

  • cookiecutter-reproducible-science: 用於開始一個可重複和透明的科學專案,包括資料,模型,分析和報告的cookiecutter模板 (比如你的科學論文)。與上面資料科學Cookiecutter模板的哲學非常一致

資料驅動的Journalism

  • cookiecutter-data-driven-journalism: 通過持續組織資料日誌專案和一些預先填充的檔案來促進資料日誌的透明度的Cookiecutter模板(包括 .gitignore, README, AUTHORS)

持續交付

雲工具

Tornado

其他

與Cookiecutter類似的專案

    • Paste具有建立骨架專案的建立選項。
    • Diecutter: 一個提供模板和變數的配置檔案的API服務。
    • Django的tartproject和startapp命令可以使用-template選項。
    • python-packager:使用自己的模板建立Python包,並提供可配置的選項。
    • Yeoman有一個受Rails啟發的生成器系統,為應用程式提供腳手架。
    • Pyramid的pcreate命令,用於從腳手架模板建立Pyramid 專案。
    • mr.bob是一個檔案系統模板渲染器,用於棄用paster和templer等工具
    • grunt-init曾經被內建到Grunt中,現在是一個獨立的腳手架工具,可以自動建立專案。
    • scaffolt使用Handlebars 的JSON生成器。
    • init-skeleton克隆或複製儲存庫,執行npm安裝和bower安裝,並刪除.git目錄。
    • Cog由Ned Batchelder開發的基於python的程式碼生成工具包
    • Skaffold基於python和json配置的django / MVC生成器,帶有一些附加元件和整合。