我使用nunjucks在python项目中模板化前端。 Nunjucks模板必须在生产中预先编译。 我在nunjucks模板中不使用扩展名或异步过滤器。 我宁愿使用nunjucks-precompile命令(通过npm提供)而不是使用grunt-task来监听对模板的更改,而是将整个模板目录扫入template.js。

这个想法是要在setup.py中执行nunjucks-precompile --include ["\\\\.tmpl$"] path/to/templates > templates.js命令,以便我可以简单地支持部署脚本的常规执行。

我发现setuptools覆盖distutils scripts参数可能用于正确的目的,但是我不确定这是否是最简单的执行方法。

另一种方法是使用subprocess直接在setup.py中执行命令,但是我已经被警告不要这样做(而是先发地恕我直言)。 我不太了解为什么不这么做。

有任何想法吗? 誓? 确认?

更新(04/2015): -如果没有可用的nunjucks-precompile命令,只需使用Node Package Manager来安装nunjucks,如下所示:

$ npm install nunjucks

#1楼 票数:3 已采纳

请原谅快速的自我解答。 我希望这可以帮助以太坊之外的人。 现在,我想分享我满意的解决方案。

这是一个安全的解决方案,基于Peter Lamut的文章 请注意,这在子流程调用中使用shell = True。 您可以绕过python部署系统上的grunt-task要求,也可以将其用于混淆和JS打包。

from setuptools import setup
from setuptools.command.install import install
import subprocess
import os

class CustomInstallCommand(install):
    """Custom install setup to help run shell commands (outside shell) before installation"""
    def run(self):
        dir_path = os.path.dirname(os.path.realpath(__file__))
        template_path = os.path.join(dir_path, 'src/path/to/templates')
        templatejs_path = os.path.join(dir_path, 'src/path/to/templates.js')
        templatejs = subprocess.check_output([
            'nunjucks-precompile',
            '--include',
            '["\\.tmpl$"]',
            template_path
        ])
        f = open(templatejs_path, 'w')
        f.write(templatejs)
        f.close()
        install.run(self)

setup(cmdclass={'install': CustomInstallCommand},
      ...
     )

#2楼 票数:0

我认为这里的链接包含了您要实现的目标。

  ask by azatar translate from so

未解决问题?本站智能推荐:

2回复

在一个`setup.py`中多次调用`setup()`是否安全?

我正在开发一个包含Cython扩展的包。 根据https://github.com/pypa/pip/issues/1958我将使用setup_requires和postpone导入Cython 。 我想出的最佳解决方案是在setup.py调用setup()两次: 但是我有一种感
2回复

如何让easy_install在setup.py中执行自定义命令?

我希望我的setup.py除了安装Python包之外还做一些自定义操作(比如安装init.d脚本,创建目录和文件等)。我知道我可以自定义distutils / setuptools类来做我自己的操作。 我遇到的问题是当我cd到包目录并执行“python setup.py install”时一切
1回复

在setup.py中调用另一个setup.py

我的存储库包含我自己的python模块和一个具有自己的setup.py的依赖项的子模块。 我想在安装自己的lib时调用依赖项的setupy.py,怎么可能? 我的第一次尝试: 但是install_requires不接受路径。 我的第二次尝试是将dependency_li
2回复

如何在setup.py中执行自定义生成步骤?

distutils模块允许包含和安装资源文件以及Python模块。 如果在构建过程中应该生成资源文件,如何正确包含它们? 例如,该项目是一个Web应用程序,其中包含应编译成JavaScript并随后包含在Python包中的CoffeeScript源代码。 有没有办法将其整合到正常的sd
2回复

在 setup.py 中强制执行 python 版本

目前,我们正在通过在install_requires属性下的setup.py提及它们的版本和依赖项来在系统上设置\\安装一些软件包。 我们的系统需要 Python 2.7。 有时,用户在他们的系统上有多个版本的 Python,比如 2.6.x 和 2.7,它说有些包已经可用,但实际上在 2.6 站点
8回复

如何在 setup.py 中引导 numpy 安装

我有一个需要 numpy.c 扩展的项目。 理想情况下,我希望下载我的项目的人能够运行python setup.py install或使用一次调用pip 。 我遇到的问题是,在我的setup.py我需要导入 numpy 以获取标头的位置,但我希望 numpy 只是install_requires的常
1回复

如何在setup.py中为PyTest使用复杂的参数

我的setup.py TestCommand看起来像这样: 我的问题是与test.args行。 我在setup.py中使用py.test的第一个概念设置证明具有以下参数: 只执行名称中包含字符串DivHour测试,并且在通过python setup.py test调用时可以
2回复

如何在setup.py中处理对scipy的依赖

我正在尝试为依赖于SciPy的项目创建setup.py 。 以下setup.py重现了这一点: 使用python setup.py develop安装时会产生以下错误: 但是,当我使用pip安装scipy时,它是从一个轮子安装它,它工作得很好。 所以,我的问题是,我如何创