最小的,现代嵌入式Python V8

网友投稿 1309 2022-11-04

最小的,现代嵌入式Python V8

最小的,现代嵌入式Python V8

Python Mini Racer

Minimal, modern embedded V8 for Python.

Free software: ISC license

Features

Unicode supportThread safeRe-usable contextsBinary object is Python agnostic

MiniRacer can be easily used by Django or Flask projects to minify assets, run babel or compile CoffeeScript.

Examples

py_mini_racer is straightforward to use:

>>> from py_mini_racer import py_mini_racer>>> ctx = py_mini_racer.MiniRacer()>>> ctx.eval('1+1')2>>> ctx.eval("var x = {company: 'Sqreen'}; x.company")u'Sqreen'>>> print ctx.eval(u"'\N{HEAVY BLACK HEART}'")❤>>> ctx.eval("var fun = () => ({ foo: 1 });")>>> ctx.call("fun"){u'foo': 1}

Variables are kept inside of a context:

>>> ctx.eval("x.company")u'Sqreen'

You can give directly a custom jsON encoder when sending non-JSON encodable parameters:

import jsonfrom datetime import datetimeclass CustomEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.isoformat() return json.JSONEncoder.default(self, obj)

>>> ctx.eval("var f = function(args) { return args; }")>>> ctx.call("f", datetime.now(), encoder=CustomEncoder)u'2017-03-31T16:51:02.474118'

PyMiniRacer is ES6 capable:

>>> ctx.eval("[1,2,3].includes(5)")False

V8 heap information can be retrieved:

>>> ctx.heap_stats(){u'total_physical_size': 1613896, u'used_heap_size': 1512520, u'total_heap_size': 3997696, u'total_heap_size_executable': 3145728, u'heap_size_limit': 1501560832}

Compatibility

PyMiniRacer is compatible with Python 2 and Python 3. Wheels are generated for python 2.7 and python 3.4 to python 3.7.

Binary builds availability

The PyMiniRacer binary builds have been tested on x86_64 with:

OSX 10.10Ubuntu >= 12.04Debian >= 7CentOS >= 6The latest Alpine Linux Docker image

You need pip >= 8.1 to install the wheels - you can check and upgrade yours in this way:

$ pip --version$ pip install --upgrade pip

It should work on any Linux with a libc >= 2.12 and a wheel compatible pip (>= 8.1). If you're running Alpine Linux, you may need to install libgcc manually using the following command:

$ apk add libgcc

If you have a up-to-date pip and it doesn't use a wheel, you might have an environment for which no wheel is built. Please open an issue.

Installation

We built Python wheels (prebuilt binaries) for OSX 64 bits and Linux 64 bits - most recent distributions. You need pip >= 1.4 and setuptools >= 0.8.

$ pip install py-mini-racer

If you're running Alpine, Pypi isn't able to host the dedicated wheels. We're making them available with the following command.

$ pip install --index-url https://download.sqreen.io/python/alpine py-mini-racer

Build

First check that your current Python executable is version 2.7. This is required by the V8 build system.

You can then build V8 with the command:

$ python setup.py build_v8

You can also build the ctype extension:

$ python setup.py build_ext

Which automatically builds v8.

You can generate a wheel for whatever Python version with the command:

$ python setup.py build_v8 # (for Python 2 and Python 3)$ python setup.py bdist_wheel # (for Python 2 only)$ python3 setup.py bdist_wheel # (for Python 3 only)

It will then build V8, the extension, and generates a wheel for your current Python version. The V8 builds are cached in the py_mini_racer/extension/v8/ directory. Please note that you can build Python 3 wheels by reusing the cached version of V8 built with Python 2.7.

Notes for building on macOS

The legacy Python binary builds (OSX 10.6) need to be downloaded from: https://python.org/downloads/

They will allow to build a wheel compatible with former OSX versions.

If you're having build issues, you may either have to run the build a second time (which will be much faster than the first run) or run the following command before running the first build:

export LDSHARED="clang++ -bundle -undefined dynamic_lookup -arch i386 -arch x86_64"

Tests

If you want to run the tests, you need to build V8 first, then launch:

$ python setup.py test --addopts tests

Credits

Built with love by Sqreen.

PyMiniRacer launch was described in this blog post.

PyMiniRacer is inspired by mini_racer, built for the Ruby world by Sam Saffron.

Tools used in rendering this package:

Cookiecuttercookiecutter-pypackage

Todo

Export V8 version. Fix circular structures export.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:工程设备NLM5中继采集仪如何才能更省电?
下一篇:射频模块无线收发芯片
相关文章

 发表评论

暂时没有评论,来抢沙发吧~