我正在维护一个带有许多实用功能的内部 python 包。作为这个包的一部分,我包含了一个项目生成器console_script
,它使用包附带的自定义模板调用 cookiecutter。pip
使用(基本上,作为 sdist)安装软件包时,这可以正常工作。
我试图让人们conda
尽可能多地使用,所以这很不方便,因为依赖项得到解决/安装使用pip
,而不是conda
. 因此,我正在使用python setup.py bdist_conda
Anaconda 安装包含的方式创建一个 conda 包。这适用于另一个内部包。
但是,当我尝试创建当前包时,bdist_conda
创建字节编译包中的所有 python 文件,所以当然(但不是有意的)模板文件也是如此。由于 jinja 字符串,这会在运行时导致语法错误python setup.py bdist_conda
:
byte-compiling build/bdist.linux-x86_64/dumb/home/bilderbuchi/anaconda3/lib/python3.5/site-packages/mypkg/project_template/{{cookiecutter.project_name_simplified}}/{{cookiecutter.project_name_simplified}}.py to {{cookiecutter.project_name_simplified}}.cpython-35.pyc
File "/path/to/mypkg/project_template/{{cookiecutter.project_name_simplified}}/{{cookiecutter.project_name_simplified}}.py", line 4
{%- if cookiecutter.command_line_interface == 'argparse' %}
^
SyntaxError: invalid syntax
我也可以用 plain 复制python setup.py bdist
,所以我可以排除 conda 成为这里的罪魁祸首。我在基于MANIFEST.in
setuptoolsrecursive-include mypkg/project_template *
的.include_package_data = True
setup.py
有没有(更好的)方法来运送带有一些包装的 cookiecutter 模板?pip
正如我所说,这在与/sdist一起使用时效果很好,但与bdist
. 或者,有没有办法抑制 bdist 字节编译一组给定的文件?
模板不能放在网上,所以我想把它包含在包里。我还考虑将模板单独放置在其他地方,但是用户在使用项目生成器时依赖于可用的位置(例如网络驱动器)。我考虑将其添加为 zip 文件,但除了从版本控制的角度来看这非常不方便外,显然,用户将被提示在下次运行时删除现有的(我猜解压到某个用户位置)模板,所以我宁愿避免这种情况。
- Cookiecutter 版本:1.6.0
- Python版本:3.5
- 安装工具 38.5.1
- 操作系统:Linux
编辑:我也在cookiecutter 问题跟踪器中发布了这个,但到目前为止没有得到任何反馈。