Python Mini Racer
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.github Add issue_template.md Aug 2, 2016
data Add compatibility info and logo Aug 2, 2016
docs Fix copyrights and authors (#48) Apr 20, 2018
helpers Add example performing babel conversions Aug 2, 2016
patches First commit Jun 21, 2016
py_mini_racer Show a correct SyntaxError message #42 (#62) Aug 1, 2018
requirements Show a correct SyntaxError message #42 (#62) Aug 1, 2018
tests Show a correct SyntaxError message #42 (#62) Aug 1, 2018
.dockerignore Add a make target for building distributions (sdist + wheels) (#6) Aug 4, 2016
.editorconfig First commit Jun 21, 2016
.gitignore Add readme part about building it Jun 21, 2016
.travis.yml Try to fix build on travis Mar 15, 2018
AUTHORS.rst Fix copyrights and authors (#48) Apr 20, 2018
CONTRIBUTING.rst First commit Jun 21, 2016
Dockerfile.build Feature/release 0.1.9 (#21) Mar 24, 2017
HISTORY.rst Bumping version to 0.1.16 (#60) Jul 11, 2018
LICENSE Fix copyrights and authors (#48) Apr 20, 2018
MANIFEST.in Add tox and py.test configuration Jun 22, 2016
Makefile Build the wheels on Centos5 for more compatibility Jul 21, 2017
README.rst Bump version 0.1.13 Mar 15, 2018
build.sh Move source file and add test build script Jun 29, 2016
build_and_check_linux_wheels.sh Build wheel for Python 3.7 (#55) Jun 18, 2018
build_c_extension.sh Bypass setuptools to compile the extension with custom commands Jul 4, 2016
build_linux_wheels.sh Correctly set tag for Python wheel without PyMalloc (#61) Jul 11, 2018
build_mac_os_x_wheels.sh Build wheel for Python 3.7 (#55) Jun 18, 2018
build_macos.sh Put built macOS binary to the load directory Mar 9, 2018
build_so.sh Add wheel for Python without PyMalloc (#59) Jul 11, 2018
build_v8.sh Directly use manylinux docker Mar 15, 2018
install_osx.sh Build wheel for Python 3.7 (#55) Jun 18, 2018
requirements.txt First commit Jun 21, 2016
setup.cfg Bypass setuptools to compile the extension with custom commands Jul 4, 2016
setup.py Fix copyrights and authors (#48) Apr 20, 2018
tox.ini Add tox and py.test configuration Jun 22, 2016
upload_artifacts_linux.sh Upload .tar.gz in s3 (#52) May 25, 2018
upload_artifacts_mac_os_x.sh Use dedicated scripts to upload artifacts Dec 11, 2017
wheel_pymalloc.py Correctly set tag for Python wheel without PyMalloc (#61) Jul 11, 2018

README.rst

Python Mini Racer

Minimal, modern embedded V8 for Python.

  • Free software: ISC license

data/py_mini_racer.png

Features

  • Unicode support
  • Thread safe
  • Re-usable contexts
  • Binary 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 json

from datetime import datetime

class 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.6.

Binary builds availability

The PyMiniRacer binary builds have been tested on x86_64 with:

  • OSX 10.10
  • Ubuntu >= 12.04
  • Debian >= 7
  • CentOS >= 6

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 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

Build

You can 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 with the command:

$ python setup.py bdist_wheel

which builds v8, the extension, and generates a wheel.

Notes for building on OSX

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

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

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:

Todo

Export V8 version. Fix circular structures export.