繁体   English   中英

如何在bdist / conda包中包含cookiecutter模板?

[英]How to include a cookiecutter template with a bdist/conda package?

我正在维护带有许多实用程序功能的内部python软件包。 作为该软件包的一部分,我包括了一个项目生成器console_script ,它使用该软件包附带的自定义模板调用cookiecutter。 当使用pip安装软件包时(通常是sdist),这可以很好地工作。

我试图让人们尽可能多地使用conda ,所以这很不方便,因为依赖项是通过pip而不是conda来解决/安装的。 因此,我正在使用Anaconda安装随附的python setup.py bdist_conda方法创建一个conda软件包。 当然,这对于另一个内部软件包也很好。

但是,当我尝试创建当前包时, bdist_conda创建字节编译包中的所有python文件,因此模板文件当然也是(但不bdist_conda如此)。 在运行python setup.py bdist_conda时,由于jinja字符串,这会导致语法错误:

  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

我还可以使用普通的python setup.py bdist进行复制,因此可以将conda排除在这里。 我在带有MANIFEST.in的模板文件中添加了该文件,其中包含recursive-include mypkg/project_template * ,在基于setuptools的setup.py include_package_data = True

有没有一种(更好的)方式来发送带有某些软件包的cookiecutter模板? 就像我说的那样,当与pip / sdist一起使用时,这很好用,但与bdist一起使用时却失败了。 另外,有没有办法抑制bdist字节编译给定的文件集?

该模板不能在线放置,这就是为什么我想将其包括在包装中。 我还考虑过将模板分别放置在其他位置,但是当用户使用项目生成器时,用户取决于该位置(例如网络驱动器)是否可用。 我曾考虑将其添加为zip文件,但是从版本控制的角度来看,这样做非常不便, 显然 ,还会提示用户在下次运行时删除现有的模板(我想解压缩到某些用户位置),所以我宁愿避免这种情况。

  • Cookiecutter版本:1.6.0
  • Python版本:3.5
  • 设置工具38.5.1
  • 作业系统:Linux

编辑:我也将其发布在cookiecutter问题跟踪器中 ,但是到目前为止没有得到任何反馈。

因此,经过毫无结果的搜索后,我通过将所有.py模板文件更改为.pytemplate.pytemplate此问题。 这样可以避免bdist / bdist_conda发现它们。 从模板创建项目之后,我添加了一个post_gen脚本,该脚本将所有文件重命名为.py 愚蠢的解决方法,但它可以工作。 :叹:

我知道至少对于bdist,可以通过设置sys.dont_write_bytecode来避免编译,但是此变通办法不适用于bdist_conda ,请参见https://github.com/conda/conda-build/issues/686

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM