Git Product home page Git Product logo

pyminiracer's Introduction

This package is now deprecated. Go to https://github.com/bpcreech/PyMiniRacer for an up-to-date version.

Minimal, modern embedded V8 for Python.

Features

  • Latest ECMAScript support
  • Web Assembly support
  • Unicode support
  • Thread safe
  • Re-usable contexts

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

Examples

MiniRacer is straightforward to use:

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

Variables are kept inside of a context:

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

While eval only supports returning primitive data types such as strings, call supports returning composite types such as objects:

>>> ctx.call("fun")
{'foo': 1}

Composite values are serialized using JSON. Use 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)
'2017-03-31T16:51:02.474118'

MiniRacer is ES6 capable:

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

V8 heap information can be retrieved:

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

A WASM example is available in the tests.

Compatibility

PyMiniRacer is compatible with Python 2 & 3 and based on ctypes.

The binary builds have been tested on x86_64 with:

  • macOS >= 10.13
  • Ubuntu >= 16.04
  • Debian >= 9
  • CentOS >= 7
  • Alpine >= 3.11
  • Windows 10

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.

$ pip install py-mini-racer

Build

Warning: building this package from source takes several GB of disk space and takes ~60 minutes.

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.

Cookiecutter-pypackage was used as this package skeleton.

pyminiracer's People

Contributors

cataphract avatar lothiraldan avatar mcdoker18 avatar messense avatar moutix avatar nizox avatar taiki-san avatar vivienm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.