fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
361 lines
8.5 KiB
Plaintext
361 lines
8.5 KiB
Plaintext
Metadata-Version: 2.1
|
|
Name: py-mini-racer
|
|
Version: 0.6.0
|
|
Summary: Minimal, modern embedded V8 for Python.
|
|
Home-page: https://github.com/sqreen/PyMiniRacer
|
|
Author: Sqreen
|
|
Author-email: support@sqreen.com
|
|
License: ISCL
|
|
Keywords: py_mini_racer
|
|
Platform: UNKNOWN
|
|
Classifier: Development Status :: 5 - Production/Stable
|
|
Classifier: Intended Audience :: Developers
|
|
Classifier: License :: OSI Approved :: ISC License (ISCL)
|
|
Classifier: Natural Language :: English
|
|
Classifier: Programming Language :: Python :: 2
|
|
Classifier: Programming Language :: Python :: 2.7
|
|
Classifier: Programming Language :: Python :: 3
|
|
Description-Content-Type: text/x-rst
|
|
|
|
.. image:: https://img.shields.io/pypi/v/py_mini_racer.svg
|
|
:target: https://pypi.python.org/pypi/py_mini_racer
|
|
|
|
.. image:: https://dev.azure.com/sqreenci/PyMiniRacer/_apis/build/status/sqreen.PyMiniRacer?branchName=master
|
|
:target: https://dev.azure.com/sqreenci/PyMiniRacer/_build/latest?definitionId=10&branchName=master
|
|
|
|
.. image:: https://img.shields.io/badge/License-ISC-blue.svg
|
|
:target: https://opensource.org/licenses/ISC
|
|
|
|
Minimal, modern embedded V8 for Python.
|
|
|
|
.. image:: https://github.com/sqreen/PyMiniRacer/raw/master/data/py_mini_racer.png
|
|
:align: center
|
|
|
|
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:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> 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:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> ctx.eval("x.company")
|
|
'Sqreen'
|
|
|
|
|
|
While ``eval`` only supports returning primitive data types such as
|
|
strings, ``call`` supports returning composite types such as objects:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> ctx.call("fun")
|
|
{'foo': 1}
|
|
|
|
|
|
Composite values are serialized using JSON.
|
|
Use a custom JSON encoder when sending non-JSON encodable parameters:
|
|
|
|
.. code-block:: python
|
|
|
|
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)
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
>>> 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:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> ctx.execute("[1,2,3].includes(5)")
|
|
False
|
|
|
|
V8 heap information can be retrieved:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> 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`_.
|
|
|
|
.. _`tests`: https://github.com/sqreen/PyMiniRacer/blob/master/tests/test_wasm.py
|
|
|
|
|
|
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:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ 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.
|
|
|
|
.. code:: bash
|
|
|
|
$ 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.
|
|
|
|
.. code:: bash
|
|
|
|
$ python --version
|
|
Python 2.7.16
|
|
|
|
You can build the extension with the following command:
|
|
|
|
.. code:: bash
|
|
|
|
$ python helpers/v8_build.py
|
|
|
|
You can generate a wheel for whatever Python version with the command:
|
|
|
|
.. code:: bash
|
|
|
|
$ 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:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ python -m pip install pytest
|
|
|
|
Then launch:
|
|
|
|
.. code:: bash
|
|
|
|
$ python -m pytest tests
|
|
|
|
Credits
|
|
-------
|
|
|
|
Built with love by Sqreen_.
|
|
|
|
.. _Sqreen: https://www.sqreen.com
|
|
|
|
PyMiniRacer launch was described in `this blog post`_.
|
|
|
|
.. _`this blog post`: https://blog.sqreen.com/embedding-javascript-into-python/
|
|
|
|
PyMiniRacer is inspired by mini_racer_, built for the Ruby world by Sam Saffron.
|
|
|
|
.. _`mini_racer`: https://github.com/SamSaffron/mini_racer
|
|
|
|
`Cookiecutter-pypackage`_ was used as this package skeleton.
|
|
|
|
.. _`Cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
|
|
|
|
|
|
|
|
|
|
History
|
|
-------
|
|
|
|
0.6.0 (2020-04-20)
|
|
'''''''''''''''''''
|
|
* Update V8 to 8.9
|
|
* Optimize function calls without arguments
|
|
* Switch V8 to single threaded mode to avoid crashes after fork
|
|
* Switch to strict mode by default
|
|
* Revamp documentation
|
|
|
|
0.5.0 (2020-02-25)
|
|
'''''''''''''''''''
|
|
* Update V8 to 8.8
|
|
|
|
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.
|
|
|
|
|