Python调用nodejs现在建议的方法(弃用pyexecjs、pyv8、js2py) 您所在的位置:网站首页 oloey是什么牌子手表 Python调用nodejs现在建议的方法(弃用pyexecjs、pyv8、js2py)

Python调用nodejs现在建议的方法(弃用pyexecjs、pyv8、js2py)

2023-08-25 07:45| 来源: 网络整理| 查看: 265

前言

有时候我们需要借助 nodejs 的一些包独特的性能,但是又要在 Python 环境中调用。

目前网上最流行的有三种( pyexecjs、pyv8、js2py )让 Python 调用 nodejs 的依赖库,但他们都有很大的问题,不建议使用。

不建议的原因 pyexecjs

在这里插入图片描述 乍一看作者还在维护,其实作者已经表示这个库要没了,EOL 不在维护了: 在这里插入图片描述 可谓是年久失修,运行简单的代码还可以苟延残喘,实测稍微带新特性的复杂脚本是运行不了的,即使 babel 做过兼容的也不行。

pyv8

pyv8 更可怕,都是上古存档,直接放弃。 在这里插入图片描述

js2py

在这里插入图片描述 这个是着实很不错的,作者一直在维护,而且表示未来会兼容 es6(目前只兼容 es5 )

但是他在 Windows 上运行有巨大的 bug ,底层执行 shell 的时候会报错:

Could not link required node_modules

我们可以在 issue#125 里翻到 2018 年的一个解决方案,但是仍然执行失败,因为他默认还要安装 babel 系列组件,再用 babel 编译一遍,更难受的是这些组件是已经淘汰的 babel 7 之前的依赖。

也就是说,要执行新特性和复杂一点的脚本,这个库我们也用不了。

建议方法

经过探索之后,建议直接用命令行执行,简单有效:

import os os.system('node script.js')

那又一个问题来了,这样执行效率很低(当然比 js2py 高,js2py 就算能跑起来也要很久去处理兼容问题和安装依赖,花费极其大量的时间),我们使用 babel 7 做一个处理:

安装 babel 7 依赖:

yarn add @babel/core @babel/cli @babel/preset-env -D yarn add @babel/polyfill core-js@3

配置 babel 的 babel.config.json 文件:

{ "presets": [ [ "@babel/env", { "useBuiltIns": "usage", "corejs": { "version": 3, "proposals": true } } ] ] }

执行编译:

yarn run babel script.js -o scriptOut.js

细心的人可能会发现 7.4 之后不推荐使用 @babel/polyfill 了,但是使用外置 corejs 依赖是可以的,详见:

《babel7.4之后babel/polyfill是否继续使用和怎么用的问题》

之后测试一下速度:

time_start=time.time() os.system('node script.js') time_end=time.time() print('totally cost: ',time_end-time_start)

最终发现经过 babel 编译的明显速度加快,而且较稳定。

总结

不是说一定要用 babel 编译,如果 webpack 打包可能更快,只是为了提高执行速度的一种手段,毕竟在这里编不编译只是时间问题而不是能不能执行的问题。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有