![](/img/trans.png)
[英]How to include pip-only package when building conda package by using conda-build?
[英]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问题跟踪器中 ,但是到目前为止没有得到任何反馈。
因此,经过毫无结果的搜索后,我通过将所有.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.