Skip to main content

Minimal, modern embedded V8 for Python.

Project description

https://img.shields.io/pypi/v/py_mini_racer.svg

Minimal, modern embedded V8 for Python.

  • Free software: ISC license

https://github.com/sqreen/PyMiniRacer/raw/master/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.

History

UNRELEASED

0.1.13 (2018-03-15)

  • Add heap_stats function

  • Fix issue with returned strings containing null bytes

0.1.12 (2018-17-04)

  • Remove dependency to enum

0.1.11 (2017-07-11)

  • Add compatibility for centos6

0.1.10 (2017-03-31)

  • Add the possibility to pass a custom JSON encoder in call.

0.1.9 (2017-03-24)

  • Fix the compilation for Ubuntu 12.04 and glibc < 2.17.

0.1.8 (2017-03-02)

  • Update targets build for better compatibility with old Mac OS X and linux platforms.

0.1.7 (2016-10-04)

  • Improve general performances of the JS execution.

  • Add the possibility to build a different version of V8 (for example with debug symbols).

  • Fix a conflict that could happens between statically linked libraries and dynamic ones.

0.1.6 (2016-08-12)

  • Add error message when py_mini_racer sdist fails to build asking to update pip in order to download the pre-compiled wheel instead of the source distribution.

0.1.5 (2016-08-04)

  • Build py_mini_racer against a static Python. When built against a shared library python, it doesn’t work with a static Python.

0.1.4 (2016-08-04)

  • Ensure JSEvalException message is converted to unicode

0.1.3 (2016-08-04)

  • Fix extension loading for python3

  • Add a make target for building distributions (sdist + wheels)

  • Fix eval conversion for python 3

0.1.2 (2016-08-03)

  • Fix date support

  • Fix Dockerfile for generating python3 wheels

0.1.1 (2016-08-02)

  • Fix sdist distribution.

0.1.0 (2016-08-01)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_mini_racer-0.1.13.tar.gz (326.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

py_mini_racer-0.1.13-cp36-cp36m-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.6m

py_mini_racer-0.1.13-cp36-cp36m-macosx_10_6_intel.whl (4.1 MB view details)

Uploaded CPython 3.6mmacOS 10.6+ Intel (x86-64, i386)

py_mini_racer-0.1.13-cp35-cp35m-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.5m

py_mini_racer-0.1.13-cp35-cp35m-macosx_10_6_intel.whl (4.1 MB view details)

Uploaded CPython 3.5mmacOS 10.6+ Intel (x86-64, i386)

py_mini_racer-0.1.13-cp34-cp34m-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.4m

py_mini_racer-0.1.13-cp34-cp34m-macosx_10_6_intel.whl (4.1 MB view details)

Uploaded CPython 3.4mmacOS 10.6+ Intel (x86-64, i386)

py_mini_racer-0.1.13-cp27-cp27mu-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded CPython 2.7mu

py_mini_racer-0.1.13-cp27-cp27m-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded CPython 2.7m

py_mini_racer-0.1.13-cp27-cp27m-macosx_10_6_intel.whl (4.1 MB view details)

Uploaded CPython 2.7mmacOS 10.6+ Intel (x86-64, i386)

File details

Details for the file py_mini_racer-0.1.13.tar.gz.

File metadata

  • Download URL: py_mini_racer-0.1.13.tar.gz
  • Upload date:
  • Size: 326.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for py_mini_racer-0.1.13.tar.gz
Algorithm Hash digest
SHA256 fe1a8a3e863edf7fccd52973b062437239ef39b23ac93a135c03d95229a36908
MD5 145e511a84cb8b523753033a061dbef5
BLAKE2b-256 6e88b3f5907565047e757273baf61b4c681ffb68e44b3f2baa423247b471a965

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 84b06a9b82421c2e81284aca715f3b969d8a6f2066d5424e21db099f848dcb97
MD5 d5b89e5ce3f18dae06d217f444b1b020
BLAKE2b-256 8432e5e2418f86b119b44a7400e1a2bc2b9be6e62b47c9c1b831c687ed662366

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp36-cp36m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp36-cp36m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 936023e91149f9d7ab3a9233cc84ede36997431d3ad8a2925c3e66fbcd5e5c1c
MD5 b24a38c600dc0ac469e1258be3ac4c72
BLAKE2b-256 b0124f47783901b2985ea25c2390c3827b39439529e7322ebf3961b8f642fba1

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 16d7a8745bc2ad7a561ada02ac91f10313fba7d63952a0d915e115732b5301e6
MD5 cabf82a98439794434dac4e55c6c7015
BLAKE2b-256 d711f727277405a493b711ad903e3b03cc5b1754a3a65798fba189262e2b47d6

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp35-cp35m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 20d2d706565900e5d74baac6fc1898927f66f92db99d44cec3009fb91ef1ff0a
MD5 9ff41495fd98f951ad0f431244b2e3ba
BLAKE2b-256 c1764a6936d4b64a1b8c87b2054acdc9690d54e5ba13a8b3dd14ca3edec4cf24

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 bfafc01d1a54969233c958dabbdc2405019338b443fd017694caa3048eecf0a9
MD5 edae6fa619d47c3d4387d20b9a655ed7
BLAKE2b-256 d6e2a19995042607564e3153820a6b21c17e4e01c89f9585fc94dad37b678f2a

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp34-cp34m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 b60a90458ba2b501a8d90c05838bb3ef048647ff71c393e1646c017200a64746
MD5 5a05b6da43ae7615f63dbeba7440d046
BLAKE2b-256 7ba459a71af15e92b6a98d26c615eb8762aca4a20cb890b260fb1cac1a01f986

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e1b4b5c9ff4220451c0c1d6c269cdc15865b291d1b0faf40085fc1387942dd21
MD5 2b8d12b34764b5c94c080f366baa30ec
BLAKE2b-256 2cd43364da466a8e9b9d4d966ce90d5e5d94bbff655ddcd5b7c56719a7ae9c58

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 37728bd7801083f3a75d4949650e3af12afbb2d8d7d3667ae295a74cf27103ab
MD5 5d411f314e29d022b3f470eb41e250ce
BLAKE2b-256 52071c3d4ac30b5013a5b94908e01641e21e3b7e5fd1f354967e24b9d377945f

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.1.13-cp27-cp27m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for py_mini_racer-0.1.13-cp27-cp27m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 5a51b2129280ad6ad69b8c7bfe182f444ccf98ce1fc3ea64fc9a56b8239dea2f
MD5 58a57567333e3d34ae22662c04de162b
BLAKE2b-256 ca2c70a1fa6ef67ce7f220e707d1429c674dbf0450e7376217c9d05c5532caef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page