Package: py-mini-racer
Minimal, modern embedded V8 for Python.FeaturesLatest ECMAScript supportWeb Assembly supportUnicode supportThread safeRe-usable contextsMiniRacer can be easily used by Django or Flask projects to minify assets, run
babel or WASM modules.ExamplesMiniRacer is straightforward to use:>>>frompy_mini_racerimportMiniRacer>>>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'Whileevalonly supports returning primitive data types such as
strings,callsupports 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:importjsonfromdatetimeimportdatetimeclassCustomEncoder(json.JSONEncoder):defdefault(self,obj):ifisinstance(obj,datetime):returnobj.isoformat()returnjson.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)")FalseV8 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 thetests.CompatibilityPyMiniRacer is compatible with Python 2 & 3 and based on ctypes.The binary builds have been tested on x86_64 with:macOS >= 10.13Ubuntu >= 16.04Debian >= 9CentOS >= 7Alpine >= 3.11Windows 10It 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:$apkaddlibgcclibstdc++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.InstallationWe built Python wheels (prebuilt binaries) for macOS 64 bits, Linux 64 bits and Windows 64 bits.$pipinstallpy-mini-racerBuildWarning: 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--versionPython2.7.16You can build the extension with the following command:$pythonhelpers/v8_build.pyYou can generate a wheel for whatever Python version with the command:$python3helpers/build_package.pywheeldistIt will then build V8, the extension, and generates a wheel for your current
Python version. The V8 builds are cached in thepy_mini_racer/extension/v8/directory.Notes for building on macOSThe 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.TestsIf you want to run the tests, you need to build the extension first, first install pytest:$python-mpipinstallpytestThen launch:$python-mpytesttestsCreditsBuilt with love bySqreen.PyMiniRacer launch was described inthis blog post.PyMiniRacer is inspired bymini_racer, built for the Ruby world by Sam Saffron.Cookiecutter-pypackagewas used as this package skeleton.History0.6.0 (2020-04-20)Update V8 to 8.9Optimize function calls without argumentsSwitch V8 to single threaded mode to avoid crashes after forkSwitch to strict mode by defaultRevamp documentation0.5.0 (2020-02-25)Update V8 to 8.80.4.0 (2020-09-22)Universal wheels for Linux, Mac and WindowsFallback to source package for Alpine Linux0.3.0 (2020-06-29)Introduce a strict modeFix array conversion when size changes dynamically (CVE-2020-25489)0.2.0 (2020-03-11)Support for Alpine LinuxAvoid pip private modules in setup.py0.2.0b1 (2020-01-09)Support for Windows 64 bitsSupport for Python 3.8Upgrade V8 to 7.8Support soft memory limits0.1.18 (2019-01-04)Support memory and time limits0.1.17 (2018-19-12)Upgrade libv8Fix a memory leak0.1.16 (2018-07-11)Add wheel for Python without PyMalloc0.1.15 (2018-06-18)Add wheel for Python 3.70.1.14 (2018-05-25)Add support for pip 10Update package metadata0.1.13 (2018-03-15)Add heap_stats functionFix issue with returned strings containing null bytes0.1.12 (2018-17-04)Remove dependency to enum0.1.11 (2017-07-11)Add compatibility for centos60.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 unicode0.1.3 (2016-08-04)Fix extension loading for python3Add a make target for building distributions (sdist + wheels)Fix eval conversion for python 30.1.2 (2016-08-03)Fix date supportFix Dockerfile for generating python3 wheels0.1.1 (2016-08-02)Fix sdist distribution.0.1.0 (2016-08-01)First release on PyPI.