Skip to main content

Minimal, modern embedded V8 for Python.

Project description

https://img.shields.io/pypi/v/py_mini_racer.svg https://dev.azure.com/sqreenci/PyMiniRacer/_apis/build/status/sqreen.PyMiniRacer?branchName=master

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

Binary builds availability

The PyMiniRacer binary builds have been tested on x86_64 with:

  • macOS >= 10.13

  • Ubuntu >= 16.04

  • Debian >= 9

  • CentOS >= 7

  • Alpine >= 3.11

  • Windows 10

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 required dependencies manually using the following command:

$ apk add libgcc libstdc++

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 macOS 64 bits, Linux 64 bits and Windows 64 bits. You need pip >= 1.4 and setuptools >= 0.8.

$ pip install py-mini-racer

Build

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

$ python --version
Python 2.7.16

You can build the extension with the following command:

$ python helpers/v8_build.py

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

$ python3 helpers/build_package.py wheel dist

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.

Notes for building on macOS

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 the extension first, first install pytest:

$ python -m pip install pytest

Then launch:

$ python -m pytest 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:

History

0.5.0b2 (2020-02-10)

  • Update V8 to 8.8

0.5.0b1 (2020-10-02)

  • Update V8 to 8.5

0.4.0 (2020-09-22)

  • Universal wheels for Linux, Mac and Windows

  • Fallback to source package for Alpine Linux

0.3.0 (2020-06-29)

  • Introduce a strict mode

  • Fix array conversion when size changes dynamically (CVE-2020-25489)

0.2.0 (2020-03-11)

  • Support for Alpine Linux

  • Avoid pip private modules in setup.py

0.2.0b1 (2020-01-09)

  • Support for Windows 64 bits

  • Support for Python 3.8

  • Upgrade V8 to 7.8

  • Support soft memory limits

0.1.18 (2019-01-04)

  • Support memory and time limits

0.1.17 (2018-19-12)

  • Upgrade libv8

  • Fix a memory leak

0.1.16 (2018-07-11)

  • Add wheel for Python without PyMalloc

0.1.15 (2018-06-18)

  • Add wheel for Python 3.7

0.1.14 (2018-05-25)

  • Add support for pip 10

  • Update package metadata

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.5.0b2.tar.gz (5.9 MB 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.5.0b2-py2.py3-none-win_amd64.whl (4.7 MB view details)

Uploaded Python 2Python 3Windows x86-64

py_mini_racer-0.5.0b2-py2.py3-none-manylinux1_x86_64.whl (5.3 MB view details)

Uploaded Python 2Python 3

py_mini_racer-0.5.0b2-py2.py3-none-macosx_10_10_x86_64.whl (6.3 MB view details)

Uploaded Python 2Python 3macOS 10.10+ x86-64

File details

Details for the file py_mini_racer-0.5.0b2.tar.gz.

File metadata

  • Download URL: py_mini_racer-0.5.0b2.tar.gz
  • Upload date:
  • Size: 5.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/2.7.16

File hashes

Hashes for py_mini_racer-0.5.0b2.tar.gz
Algorithm Hash digest
SHA256 dfff581bf557271023a8bd615e541a4375d8b8f2149a7f83fcc722e7ef81ffcd
MD5 99e2d180c165500786674481f31ad207
BLAKE2b-256 fac37345e1a95bca97042133612d09f43a5097cb9d314191e4c1736fdc18cc79

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.5.0b2-py2.py3-none-win_amd64.whl.

File metadata

  • Download URL: py_mini_racer-0.5.0b2-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 4.7 MB
  • Tags: Python 2, Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/2.7.16

File hashes

Hashes for py_mini_racer-0.5.0b2-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9de8c8d1bb078849617b7bdb5c9a6d6f535215d8797ab4cdfaf0811cab93a9f2
MD5 82ce73895e3f38cf714095716b776ad9
BLAKE2b-256 87ba8042a5b10745bdb220945aaf15df7a295ba4c37ff38d9071f13e1364d76f

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.5.0b2-py2.py3-none-manylinux1_x86_64.whl.

File metadata

  • Download URL: py_mini_racer-0.5.0b2-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/2.7.16

File hashes

Hashes for py_mini_racer-0.5.0b2-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1664b2c4a24757887b2fa1818272fbfae39aa0d26a22bc60c3633c6994b3b7a6
MD5 9fc3efdca805f7b8cea7981334f5a0eb
BLAKE2b-256 a95f76f47ae38126fd1cde640610d836cd5c4ddab6e1c0bee6b8f13e5e8fefe9

See more details on using hashes here.

File details

Details for the file py_mini_racer-0.5.0b2-py2.py3-none-macosx_10_10_x86_64.whl.

File metadata

  • Download URL: py_mini_racer-0.5.0b2-py2.py3-none-macosx_10_10_x86_64.whl
  • Upload date:
  • Size: 6.3 MB
  • Tags: Python 2, Python 3, macOS 10.10+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/2.7.16

File hashes

Hashes for py_mini_racer-0.5.0b2-py2.py3-none-macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 4a71f8b200437c330fe24d61f5836e11cf27bbdfb087b0f275a5b4ea29610018
MD5 90d135f68ed2c00230a417b3697ef05d
BLAKE2b-256 3f6d7198763c57957e81dc9f09eb9429af3697516e3e96173a3179b1056e914c

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