Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Run JavaScript code from Python

Project Description

PyExecJS

Run JavaScript code from Python.

PyExecJS is a porting of ExecJS from Ruby. PyExecJS automatically picks the best runtime available to evaluate your JavaScript program.

A short example:

>>> import execjs
>>> execjs.eval("'red yellow blue'.split(' ')")
['red', 'yellow', 'blue']
>>> ctx = execjs.compile("""
...     function add(x, y) {
...         return x + y;
...     }
... """)
>>> ctx.call("add", 1, 2)
3

Supported runtimes

Installation

$ pip install PyExecJS

or

$ easy_install PyExecJS

Details

If EXECJS_RUNTIME environment variable is specified, PyExecJS pick the JavaScript runtime as a default:

>>> execjs.get().name # this value is depends on your environment.
>>> os.environ["EXECJS_RUNTIME"] = "Node"
>>> execjs.get().name
'Node.js (V8)'

You can choose JavaScript runtime by execjs.get():

>>> default = execjs.get() # the automatically picked runtime
>>> default.eval("1 + 2")
3
>>> import execjs.runtime_names
>>> jscript = execjs.get(execjs.runtime_names.JScript)
>>> jscript.eval("1 + 2")
3
>>> import execjs.runtime_names
>>> node = execjs.get(execjs.runtime_names.Node)
>>> node.eval("1 + 2")
3

The pros of PyExecJS is that you do not need take care of JavaScript environment. Especially, it works in Windows environment without installing extra libraries.

One of cons of PyExecJS is performance. PyExecJS communicate JavaScript runtime by text and it is slow. The other cons is that it does not fully support runtime specific features.

PyV8 might be better choice for some use case.

License

Copyright (c) 2016 Omoto Kenji. Copyright (c) 2011 Sam Stephenson and Josh Peek. (As a author of ExecJS)

Released under the MIT license. See LICENSE for details.

Changelog

1.4.1

  • Fixed arguments of module-level functions.
  • Fixed bug of execution with pipe.
  • Fixed wrong excption is raised.

1.4.0

  • Fixed required libraries.
  • Fixed order of output of --print-available-runtimes.
  • Execute some JavaScript runtime with pipe/stdin (without temporary file).

1.3.1

  • Fixed --print-available-runtimes fails in Python 2.7.

1.3.0

  • Added cwd argument.

1.2.0

  • Supported Python 3.5
  • Supported Nashorn(Java 8 JavaScript engine) as runtime
  • Dropped support for Python 2.6 and 3.2

1.1.0

  • Supported Python 3.4
  • Supported SlimerJS as runtime
  • Supported PhantomJS as runtime
  • Fixed JScript runtime on Windows 8

1.0.5

  • Supported Python 3.3
  • Fixed file handle leaking
  • Fixed issue with passenger-nginx-4.0

1.0.4

  • Removed “import execjs” (it prevent execution of setup.py by Python 2.6)

1.0.3

  • Javascript sources were embeded in init.py. ‘which’ command were reimplemented by pure python.

1.0.2

  • Python 2.6.x was supported.

1.0.1

  • Forgotten shell=True was added to Popen.

1.0.0

  • First release.
Release History

Release History

This version
History Node

1.4.1

History Node

1.4.0

History Node

1.3.1

History Node

1.3.0

History Node

1.2.0

History Node

1.1.0

History Node

1.0.5

History Node

1.0.4

History Node

1.0.3

History Node

1.0.2

History Node

1.0.1

History Node

1.0.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
PyExecJS-1.4.1.tar.gz (14.6 kB) Copy SHA256 Checksum SHA256 Source Sep 17, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting