我正在编写软件,允许人们将数学书籍作为网站发布。它主要基于Python + Flask,但是使用MathJax来处理方程式。 MathJax可以在客户端或服务器端使用(通过MathJax-node)。在后一种情况下,我必须使用npm
在我的主Python脚本可访问的某个位置安装MathJax节点,然后从脚本调用它。在前一种情况下,我必须提供MathJax.js作为资产,可供客户使用(目前我使用Flask' send_from_directory
函数。)
我的问题是:在Python中处理这种异构依赖的最佳做法是什么?我的目标是使安装过程尽可能简单,至少在类似unix的系统(Linux或MacOS)上,前提是node
和npm
已经可用。
我可以将我需要的所有javascript源代码放入我的发行版本中,但也许有更好的方法可以做到这一点?
答案 0 :(得分:5)
我的问题是:处理此类问题的最佳做法是什么 Python中的异构依赖?
在Node依赖项的情况下,我会在目录中包含一个package.json
文件,该文件指定所需的Node依赖项。对于其他语言/包管理器,我也会使用任何指定依赖项的传统方法(例如为Ruby依赖项添加Gemfile)。
Python / Flask提出的另一个常见示例是使用Bower包管理器来实现静态前端依赖。在这种情况下,依赖关系在bower.json
文件中指定,通常被拉入Flask的static
目录中的bower文件夹。
我可以把我需要的所有javascript源都放到我的发行版中 本身,但也许还有更好的方法吗?
一旦你获得了指定了依赖项的package.json
,就可以通过运行npm install
获取并安装所需的所有Node依赖项,在我看来,这是一个比包括该项目的javascript源代码。
现在您已经拥有多个软件包管理器(例如,除了pip
之外,您可能还需要npm
用于Python依赖项以获取Node依赖项),您可能需要创建一个Makefile或者一些部署/构建脚本使用所有这些来获取/安装(例如,如果我使用Travis CI,除了.travis.yml
之外,我还会更新npm install
以呼叫pip install -r
。
答案 1 :(得分:1)
使用Node.js package.json将是处理JavaScript依赖项的最佳解决方案。至于从.py执行可执行文件,您可以参考此答案Running shell command from Python and capturing the output。默认情况下,节点依赖项位于./node_modules内,与package.json文件的位置位于同一目录中。
用于安装新的依赖项:
npm install --save npm-package-you-want-to-install
准备好后,此命令将为您安装所有内容:
npm install
节点依赖性绝对是处理事物的更优雅的方式,因为javascript是一个不断发展的世界,而且比简单地调用所述脚本的许多脚本标记/函数更容易看一下package.json。如果您想要一个自动化系统,我的建议是制作一个可执行文件(.sh),它将为两者运行分期付款,您可以在未来的项目中使用它。
答案 2 :(得分:0)
我建议使用webpack Webpack.js而不是Bowerjs。 NPM和他的package.json非常适合依赖更新,但是从node_modules引用库有点令人尴尬。