PyMiniRacer基于Google的V8引擎,集成在Python中,不需要外部环境。
PyExecJS支持的环境有 V8、Node、PhantomJS、Nashorn等,每次调用时会重新加载整个 JS 环境。
PyMiniRacer 可保持全局变量的状态,适合多次调用间需保留上下文的场景。
PyExecJS 每次调用均重新初始化,无法保留全局变量状态。
若追求高性能或需维护 JS 上下文,优先使用 PyMiniRacer
若需快速验证或需跨平台兼容性,可选用 PyExecJs
PyMiniRacer: https://github.com/sqreen/PyMiniRacer
安装: pip install py-mini-racer
Examples:
from py_mini_racer import MiniRacer
ctx = MiniRacer()
ctx.eval("1+1")
ctx.eval("var x = {company: 'Sqreen'}; x.company")
ctx.eval("var fun = () => ({ foo: 1 });")
ctx.eval("var f = function(args) { return args; }")
ctx.call("f", datetime.now(), encoder=CustomEncoder)
PyExecJS :https://github.com/doloopwhile/PyExecJS
安装(需要有JS环境): pip install PyExecJS
Examples:
import execjs
execjs.eval("'red yellow blue'.split(' ')")
ctx = execjs.compile("""
function add(x, y) {
return x + y;
}
""")
ctx.call("add", 1, 2)