最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript dependencies in python project - Stack Overflow

programmeradmin4浏览0评论

I'm writing software that allows one to publish mathematical books as websites. It is based mostly on Python + Flask, but to deal with equations I'm using MathJax. MathJax can be used either client-side or server-side (through MathJax-node). In the latter case I have to use npm to install MathJax-node in some place accessible to my main Python script, then invoke it from the script. In the former case, I have to provide MathJax.js as an asset, available to client (currently I use Flask's send_from_directory function).

My question is: what is the best practice of dealing with such heterogenous dependencies in Python? My goal is to make installation process as simple as possible at least on unix-like systems (Linux or MacOS), provided that node and npm are already available.

I can just put all the javascript sources I need into my distribution itself, but maybe there's a better way to do it?

I'm writing software that allows one to publish mathematical books as websites. It is based mostly on Python + Flask, but to deal with equations I'm using MathJax. MathJax can be used either client-side or server-side (through MathJax-node). In the latter case I have to use npm to install MathJax-node in some place accessible to my main Python script, then invoke it from the script. In the former case, I have to provide MathJax.js as an asset, available to client (currently I use Flask's send_from_directory function).

My question is: what is the best practice of dealing with such heterogenous dependencies in Python? My goal is to make installation process as simple as possible at least on unix-like systems (Linux or MacOS), provided that node and npm are already available.

I can just put all the javascript sources I need into my distribution itself, but maybe there's a better way to do it?

Share Improve this question asked May 25, 2017 at 16:51 Ilya V. SchurovIlya V. Schurov 8,0674 gold badges48 silver badges82 bronze badges 5
  • softwareengineering.stackexchange. might be a better fit for this question – WhiteHotLoveTiger Commented May 25, 2017 at 17:37
  • @WhiteHotLoveTiger when referring other sites, it is often helpful to point that cross-posting is frowned upon – gnat Commented May 25, 2017 at 18:09
  • @gnat Good to know. I was not aware of that. Would migrating be considered appropriate in this case? – WhiteHotLoveTiger Commented May 25, 2017 at 18:15
  • @WhiteHotLoveTiger, thanks, I didn't know about that site. How can I migrate my question there? It seems that close → offtopic → this question belongs to another SE site" gives me some sites but not *softwareengineering as possible migration targets. – Ilya V. Schurov Commented May 25, 2017 at 19:29
  • I have created and released the calmjs project for this specific use case, provided that node and npm are available, the integration packages (such as calmjs.webpack) should work. At the very least, with calmjs it is possible to declare a package.json that is persisted as part of a given Python package as its metadata for reuse by their dependants. – metatoaster Commented Apr 26, 2018 at 14:10
Add a ment  | 

3 Answers 3

Reset to default 7

My question is: what is the best practice of dealing with such heterogenous dependencies in Python?

In the case of Node dependencies, I would include a package.json file in the directory which specifies the Node dependencies needed. For other languages/package managers, I would also use whatever the conventional way of specifying dependencies is (e.g. add a Gemfile for Ruby dependencies).

Another mon example of this that es up with Python/Flask is using the Bower package manager for static frontend dependencies. In that case, the dependencies are specified in the bower.json file and are usually pulled into a bower folder in Flask's static directory.

I can just put all the javascript sources I need into my distribution itself, but maybe there's a better way to do it?

Once you've got the package.json with the dependencies specified, you can fetch and install all the Node dependencies needed by running npm install which, in my opinion, is a more elegant solution than including the javascript sources with the project.

Now that you've got multiple package managers (e.g. maybe you're using pip for the Python dependencies in addition to npm for the Node dependencies), you might want to make a Makefile or some deployment/build script to fetch/install using all of them (for example, if I were using Travis CI, I would update my .travis.yml to call npm install in addition to pip install -r).

Using Node.js package.json would be the most optimal solution for dealing with JavaScript dependencies. As for executing executables from .py you can reference to this answer Running shell mand from Python and capturing the output. Node dependencies are by default inside ./node_modules in the same directory as the location of your package.json file.

For installing new dependencies:

npm install --save npm-package-you-want-to-install

Once you have them prepared this mand will have everything installed for you:

npm install

Node dependencies are definitely more elegant way of dealing with things since javascript is a constantly evolving world and it is much easier to take a look at a package.json than a lot of script tags / functions that simply invoke said scripts. If you want a automated system my suggestion would be to make a executable (.sh) which will run installment for both and you can use that in your future projects.

I remend to use webpack Webpack.js not Bowerjs. NPM and his package.json are very good for dependency updates but referencing libraries from node_modules is a little embarrasing.

发布评论

评论列表(0)

  1. 暂无评论