繁体   English   中英

如何在setup.py中执行(安全)bash shell命令?

How to execute a (safe) bash shell command within setup.py?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我使用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
2 个回复

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

这是一个安全的解决方案,基于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},
      ...
     )

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

1 如何在setup.py中安装轮子

我正在创建一个依赖于PyPI包的项目。 即: 但是,其中一些(例如opencv-python )只包含PyPI上的wheel文件。 https://pypi.python.org/simple/opencv-python/ 根据我的理解,setuptools与.whl不兼容。 ...

2 无法执行“ python setup.py build”命令..!

我正在尝试在BACKTRACK 5 R1虚拟机上安装pylorcon-1 ( Lorcon的python包装器,用于编写无线数据包的嗅探器)...我从[Pylorcon官方页面] [1]下载的软件包有3个文件pylorcon .c,setup.py和tx.py ..因此,如README文件中所述 ...

4 如何从 Python 中运行“python setup.py install”?

我正在尝试创建一个用于启动 python 应用程序的通用 python 脚本,如果目标系统中缺少任何依赖的 python 模块,我想安装它们。 如何从 Python 本身运行与命令行命令 'python setup.py install' 等效的命令? 我觉得这应该很容易,但我无法弄清楚。 ...

2010-12-12 00:17:34 7 16082   python
5 如何在python setup.py中chmod文件?

我创建了一个带有setup.py的python包安装,我希望它能够复制文件夹(为场合创建)〜/ .did中的数据文件。 问题是我必须使用sudo权限调用setup.py,因为它在/ usr / local /中写入...所以当我的数据文件被复制到〜/ .did时,只有root用户具有对文件的写 ...

6 Python setup.py运行外壳脚本

在创建Python包时,我需要在'sdist'阶段运行自己的脚本。 我写了以下脚本。 您知道更好的方法吗? 您能推荐一个更好的方法吗,或者链接到setuptools上解释了这一刻的官方文档? ...

9 如何在 setup.py 中包含 SWIG 执行?

我正在尝试为我编写的一些 C++ 实用程序(一些类、函数等)构建一个带有 SWIG 接口(比如example.i )的 Python 3 模块。 我想找到一种方法在setup.py添加 SWIG 的执行,以便用户不必自己执行 SWIG(即,他们不必运行swig -python -c++ exampl ...

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

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

暂无
暂无

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

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