用cookiecutter来创建新项目

栏目: Python · 发布时间: 6年前

内容简介:IDE都会有一套生成新项目的向导(Wizard),通过点点点,就可以得到一个可以运行的某类程序。 这样的程序,具备了推荐的项目结构,配置的基本的编译、打包、测试,尽管功能只是一个令人惋惜的是,Python的IDE——PyCharm并不自带这个功能。 这其中,也有Python项目千变万化的因素。 Python的适用范围太广,从桌面到服务器,从游戏到数据分析,都做一套显然投入太大。 而Python又是一门解释型语言,随便写个文件也能直接执行,似乎没有这个必要。然而,我要说,还是有必要的!

IDE都会有一套生成新项目的向导(Wizard),通过点点点,就可以得到一个可以运行的某类程序。 这样的程序,具备了推荐的项目结构,配置的基本的编译、打包、测试,尽管功能只是一个 helloworld 。 这个功能,极大地降低了初学者的进入门槛,也统一了某类项目的文件结构,是一个了不起的进步。 最早使用这类手段的,似乎是Visual Studio。

令人惋惜的是,Python的IDE——PyCharm并不自带这个功能。 这其中,也有 Python 项目千变万化的因素。 Python的适用范围太广,从桌面到服务器,从游戏到数据分析,都做一套显然投入太大。 而Python又是一门解释型语言,随便写个文件也能直接执行,似乎没有这个必要。

然而,我要说,还是有必要的!

因为Python系缺失一个Wizard,也缺少项目结构的标准,于是出现了 cookiecutter 。 这是一个项目生成器,也可称为引擎,因为它只完成了最核心的功能。 真正决定一个项目长什么样的模板,却可以自由定制。 也因此,它能生成任何一种语言的项目。

安装cookiecutter

pip install cookiecutter

cookiecutter 就是一个已经发布的Python包,因此用Python的手段可以直接安装。

对于非Python系的 程序员 来说,也可以使用包管理器的方式安装。

# For Mac
brew install cookiecutter
# For Debian/Ubuntu
sudo apt install cookiecutter

使用cookiecutter

首先,寻找一个合适的 cookiecutter 项目。 最主要的方式,就是访问其GitHub主页的 A Pantry Full of Cookiecutters

如果挑选完毕(这里以 cookiecutter-pypackage 为例),则可直接执行 cookiecutter 生成项目。

$ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git
full_name [Yan QiDong]:
email [yanqd0@outlook.com]:
github_username [yanqd0]:
project_name [Python Boilerplate]: trycookie
project_slug [trycookie]:
project_short_description [Python Boilerplate contains all the boilerplate you need to create a Python package.]: A description
pypi_username [yanqd0]:
version [0.1.0]:
use_pytest [n]:
use_pypi_deployment_with_travis [y]:
add_pyup_badge [n]:
Select command_line_interface:
1 - Click
2 - No command-line interface
Choose from 1, 2 (1, 2) [1]:
create_author_file [y]:
Select open_source_license:
1 - MIT license
2 - BSD license
3 - ISC license
4 - Apache Software License 2.0
5 - GNU General Public License v3
6 - Not open source
Choose from 1, 2, 3, 4, 5, 6 (1, 2, 3, 4, 5, 6) [1]:

在项目生成过程中,会产生一些提示,需要输入对应信息。 这和各类Wizard的GUI中,填写项目名、包名什么的,是同类操作。 以上是,除了项目名叫 trycookie ,基本都选默认的一个结果。

查看项目结构:

$ tree -a trycookie
trycookie
├── .editorconfig
├── .github
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── AUTHORS.rst
├── CONTRIBUTING.rst
├── HISTORY.rst
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── docs
│   ├── Makefile
│   ├── authors.rst
│   ├── conf.py
│   ├── contributing.rst
│   ├── history.rst
│   ├── index.rst
│   ├── installation.rst
│   ├── make.bat
│   ├── readme.rst
│   └── usage.rst
├── requirements_dev.txt
├── setup.cfg
├── setup.py
├── tests
│   ├── __init__.py
│   └── test_trycookie.py
├── tox.ini
└── trycookie
    ├── __init__.py
    ├── cli.py
    └── trycookie.py

4 directories, 30 files

如此庞大而复杂的一个项目结构,融合了作者 audreyr 对一个开源PyPI项目的理解。 虽然未必适用于任何一个人,但对于什么也不懂的菜鸟来说,却无疑是福音。

基本原理

cookiecutter 的工作原理,是先下载一个模板项目,然后替换模板项目的某些内容,生成新的项目。 在以上的示例中, https://github.com/audreyr/cookiecutter-pypackage.git 就是一个项目的Git链接。 这可以换成任何一个可以用 git clone 来下载的链接,包括各种私有Git托管平台。

如果是GitHub,还可以用以下的等效形式:

cookiecutter gh:audreyr/cookiecutter-pypackage

cookiecutter 的简短形式,支持以下三种平台。

Platform abbreviation
GitHub gh
BitBucket bb
GitLab gl

cookiecutter 也支持Mercurial( hg )。

cookiecutter hg+ssh://hg@bitbucket.org/audreyr/cookiecutter-pypackage

使用过模板的项目,默认都已经被下载到 ~/.cookiecutter 目录下。 如果需要再次使用,而又无需更新,可以直接用项目名。

cookiecutter cookiecutter-pypackage

利用这个特点,可以先用各种手段,把模板项目下载到 ~/.cookiecutter 目录下,再来使用。

参考: Usage — cookiecutter 1.6.0 documentation

配置文件

默认情况下, ~/.cookiecutterrc 就是配置文件。 它实际上是一个YAML文件。 以下是孤的配置文件示例。

# vim: set filetype=yaml:

default_context:
  full_name: "Yan QiDong"
  email: "yanqd0@outlook.com"
  github_username: "yanqd0"
cookiecutters_dir: "~/.cookiecutters/"
abbreviations:
    pp: https://github.com/audreyr/cookiecutter-pypackage.git
    gh: https://github.com/{0}.git

可配置项中, default_context 是设置生成项目时,一些提示信息的默认参数。 cookiecutters_dir 则是项目的下载位置,一般默认就好。 abbreviations 是自定义简短形式,属于高级定制功能,仅适用于重度用户。 通常,填一填 default_context 就好。

如果对 ~/.cookiecutterrc 这个配置文件的名称和位置不满意, 可以通过环境变量 COOKIECUTTER_CONFIG , 或者在命令行指定参数 --config-file 来指定新的配置文件。

参考: User Config (0.7.0+) — cookiecutter 1.6.0 documentation

总结

cookiecutter 是一个简单好用的项目生成器引擎,并且已经有很多各种类型的模板。 除了Python项目,还有很多其它语言的项目模板。 它可以极大地省去一个项目初始化的重复劳动,也可以帮助菜鸟程序员成长。

当然,如果不满意,还是可以自己修改、定制模板的。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

互联网思维独孤九剑

互联网思维独孤九剑

赵大伟 / 机械工业出版社 / 2014-3-20 / 49

《互联网思维独孤九剑》是国内第一部系统阐述互联网思维的著作,用9大互联网思维:用户思维、简约思维、极致思维、迭代思维、流量思维、社会化思维、大数据思维、平台思维、跨界思维,以专业的视角全方位解读移动互联网给传统产业带来的变革,涉及战略规划、商业模式设计、品牌建设、产品研发、营销推广、组织转型、文化变革等企业经营价值链条的各个方面。这是一部传统企业互联网转型必读的“孙子兵法”,帮助我们开启对新商业文......一起来看看 《互联网思维独孤九剑》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具