千篇一律:为提示指定变量的最简单方法是什么

cookie cutter: what's the easiest way to specify variables for the prompts

是否有任何东西可以通过指向预定义的提示答案文件来提供重播类型的功能?

什么有效以及我想要实现什么。

举个例子,使用 cookiecutter 为 pypi

准备一个 Python 包

cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git

You've downloaded /Users/jluc/.cookiecutters/cookiecutter-pypackage before. Is it okay to delete and re-download it? [yes]:
full_name [Audrey Roy Greenfeld]: Spartacus   constant for me/my organization
email [audreyr@example.com]: spartacus@example.com  constant for me/my organization
...
project_name [Python Boilerplate]: GladiatorRevolt  this will vary.
project_slug [q]: gladiator-revolt  this too
...

好的,完成。

现在,我可以通过以下方式轻松重做此项目:

cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git --replay

太棒了!

我想要的:

假设我创建了另一个项目,UnleashHell

我想以某种方式准备一个文件,其中包含我的 Unleash 开发人员信息 项目级别信息。我希望能够针对此模板多次 运行 它,而不必处理提示。这个特定的 pypi 模板会定期更新,例如 python 2.7 支持已被删除。

问题:

A --replay 将只为这个 cookiecutter 模板注入最后一个 运行。如果它是 运行 针对不同的 pypi 项目,那就太糟糕了。

我对开发人员级别的信息很满意,但我需要更改所有项目级别的信息。

我尝试通过以下方式复制重播文件:

cp ~/.cookiecutter_replay/cookiecutter-pypackage.json unleash.json

编辑 unleash.json 以反映必要的更改。

然后通过--config-file标志指定它

cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git --config-file unleash.json

我收到一个丑陋的错误,它显然需要 YAML。

cookiecutter.exceptions.InvalidConfiguration: Unable to parse YAML file .../000.packaging/unleash.json. Error: None of the known patterns match for {
    "cookiecutter": {
        "full_name": "Spartacus",

没问题,json2yaml 来救援。

那也不行。

cookiecutter.exceptions.InvalidConfiguration: Unable to parse YAML file ./cookie.yaml. Error: Unable to determine type for "
    full_name: "Spartacus"

我还尝试了 < stdin 重定向:

cookiecutter.prompts.txt:

yes
Spartacus
...

它似乎没有使用它,只是中止了。

cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git < ./cookiecutter.prompts.txt
You've downloaded ~/.cookiecutters/cookiecutter-pypackage before. Is it okay to delete and re-download it? [yes]
: full_name [Audrey Roy Greenfeld]
: email [audreyr@example.com]
: Aborted

我怀疑我遗漏了一些明显的东西,但不确定是什么。首先,--config 文件的意图和格式是什么?

汇报 - 我是如何根据接受的答案让它工作的。

接受了答案,但针对 ~/.cookiecutterrc 用法进行了调整。它有效,但格式不是很清楚。尤其是在必须是 yaml 的 rc 上,尽管 rc 文件不是 always/often 的情况。

这最终成功了:

文件 ~/.cookiecutterrc:

没有嵌套在 default_context...大量无用的 yaml 解析错误(在有效的 yaml 文档上)。

default_context:
    #... cut out for privacy
    add_pyup_badge: y
    command_line_interface: "Click"
    create_author_file: "y"
    open_source_license: "MIT license"

# the names to use here are:
    # full_name: 
    # email: 
    # github_username: 
    # project_name: 
    # project_slug: 
    # project_short_description: 
    # pypi_username: 
    # version: 
    # use_pytest: 
    # use_pypi_deployment_with_travis: 
    # add_pyup_badge: 
    # command_line_interface:
    # create_author_file: 
    # open_source_license:

我仍然无法组合使用 ~/.cookiecutterrc 和特定于项目的 config.yaml。太糟糕了,预期的配置格式被如此简单地记录下来。

所以我将使用 .rc,但每次都要输入项目名称、slug 和描述。哦,好吧,现在足够了。

你就在附近。

试试这个 cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git --no-input --config-file config.yaml

--no-input参数会抑制终端用户输入,当然是可选的。

config.yaml 文件可能如下所示:

default_context:
    full_name: "Audrey Roy"
    email: "audreyr@example.com"
    github_username: "audreyr"
cookiecutters_dir: "/home/audreyr/my-custom-cookiecutters-dir/"
replay_dir: "/home/audreyr/my-custom-replay-dir/"
abbreviations:
    pp: https://github.com/audreyr/cookiecutter-pypackage.git
    gh: https://github.com/{0}.git
    bb: https://bitbucket.org/{0}

引用此示例文件:https://cookiecutter.readthedocs.io/en/1.7.0/advanced/user_config.html

您可能只需要 default_context 块,因为这是用户输入的地方。