用生成步骤打包Web应用程序的pythonic方法是什么?

ipm*_*mcc 5 python setuptools node.js reactjs webpack

我有一个基于Python的Web应用程序,正在尝试将其打包为setuptools软件包,以便可以使用pip和/或安装它python setup.py xxxxx。该Web应用程序还包含React前端的静态文件。我使用webpack(因此使用node.js)为网站生成JavaScript捆绑包。我试图找出最pythonic的方式来打包它。通过谷歌搜索,我发现nodeenv这似乎很相关。

理想情况下,我希望此软件包具有以下特征:

  • 与一起安装pip install或时python setup.py install不应安装nodewebpack,但已安装的软件包包括webpack输出。

  • webpack-生成输出应该不会需要被签入源回购。(即,它需要在包装过程中的某个时间点或另一个时间点生成。)

  • 当通过pip install -e或设置要开发的软件包时python setup.py develop安装nodewebpack(我怀疑前面提到的nodeenv方法在这方面会很有用。)它也应在此时运行 webpack,以便随后webpack存在-generated内容。

  • 如果很容易的话,如果webpack在virtualenv激活时可以在“监视”模式下启动,而在停用虚拟环境时停止(这完全是一个扩展目标),那也很酷。

鉴于这些要求,我的直觉是我将需要对sdist命令进行子类化,以使Webpack输出在源分发生成时生成。我还猜测我需要将develop命令子类化以注入仅开发需求。

看来这是某人之前必须穿越的桥梁。有人有指针吗?

Eel*_*lke 1

我认为你最好将这些问题分成不同的构建步骤,如果我们稍微剖析一下你的过程,就会出现这些步骤(假设 ,nodenpm已经virtualenv安装在你的盒子上)

  1. 在本地 virtualenv 中安装所需的 python 模块。
  2. 安装 webpack 和运行 webpack 脚本所需的 npm 模块。
  3. 运行 webpack 配置,以便您的静态资源将在本地编译。

这些步骤中的每一个都代表一个命令,该命令可能会出现在Makefile中,或者只是一个简单的 shell 脚本(如果您想坚持使用 python,则可以使用Fabric),因此您最终会得到以下命令:

  • python-requirements
  • node-requirements
  • build-static
  • build-> python-requirements, node-requirements,build-static

现在您可以随意运行这些命令了!如果您正在部署,您将运行build例如,它将连续运行每个步骤。