适用于 Python 的最小的现代嵌入式 V8。
项目描述
适用于 Python 的最小的现代嵌入式 V8。
特征
最新的 ECMAScript 支持
网络组装支持
Unicode 支持
线程安全
可重用的上下文
Django 或 Flask 项目可以轻松使用 MiniRacer 来缩小资产、运行 babel 或 WASM 模块。
例子
MiniRacer 使用简单:
>>> 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 });")
变量保存在上下文中:
>>> ctx.eval("x.company")
'Sqreen'
虽然eval只支持返回原始数据类型,如字符串,但call支持返回复合类型,如对象:
>>> ctx.call("fun")
{'foo': 1}
复合值使用 JSON 序列化。发送非 JSON 可编码参数时使用自定义 JSON 编码器:
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 支持 ES6:
>>> ctx.execute("[1,2,3].includes(5)")
False
可以检索 V8 堆信息:
>>> ctx.heap_stats()
{'total_physical_size': 1613896,
'used_heap_size': 1512520,
'total_heap_size': 3997696,
'total_heap_size_executable': 3145728,
'heap_size_limit': 1501560832}
测试中提供了一个 WASM 示例。
兼容性
PyMiniRacer 与 Python 2 和 3 兼容并基于 ctypes。
二进制构建已在 x86_64 上进行了测试,其中:
macOS >= 10.13
Ubuntu >= 16.04
Debian >= 9
中央操作系统 >= 7
高山 >= 3.11
视窗 10
它应该可以在任何具有 libc >= 2.12 和 wheel 兼容 pip (>= 8.1) 的 Linux 上运行。
如果您正在运行 Alpine Linux,您可能需要使用以下命令手动安装所需的依赖项:
$ apk add libgcc libstdc++
如果您有一个最新的点子并且它不使用轮子,那么您可能有一个没有构建轮子的环境。请打开一个问题。
安装
我们为 macOS 64 位、Linux 64 位和 Windows 64 位构建了 Python 轮子(预构建的二进制文件)。
$ pip install py-mini-racer
建造
警告:从源代码构建这个包需要几个 GB 的磁盘空间,大约需要 60 分钟。
首先检查您当前的 Python 可执行文件是 2.7 版。这是 V8 构建系统所要求的。
$ python --version
Python 2.7.16
您可以使用以下命令构建扩展:
$ python helpers/v8_build.py
您可以使用以下命令为任何 Python 版本生成轮子:
$ python3 helpers/build_package.py wheel dist
然后它将构建 V8 扩展,并为您当前的 Python 版本生成一个轮子。V8 构建缓存在py_mini_racer/extension/v8/ 目录中。
在 macOS 上构建的注意事项
- 需要从以下位置下载旧版 Python 二进制构建 (OSX 10.6):
他们将允许构建与以前的 OSX 版本兼容的轮子。
测试
如果要运行测试,需要先构建扩展,首先安装pytest:
$ python -m pip install pytest
然后启动:
$ python -m pytest tests
学分
由Sqreen用爱建造。
PyMiniRacer 的发布在这篇博文中进行了描述。
PyMiniRacer的灵感来自由Sam Saffron 为 Ruby 世界构建的 mini_racer。
Cookiecutter-pypackage被用作这个包的骨架。
历史
0.6.0 (2020-04-20)
将 V8 更新到 8.9
优化不带参数的函数调用
将 V8 切换到单线程模式以避免 fork 后崩溃
默认切换到严格模式
修改文档
0.5.0 (2020-02-25)
将 V8 更新到 8.8
0.4.0 (2020-09-22)
适用于 Linux、Mac 和 Windows 的通用轮子
回退到 Alpine Linux 的源代码包
0.3.0 (2020-06-29)
引入严格模式
修复大小动态变化时的数组转换 (CVE-2020-25489)
0.2.0 (2020-03-11)
支持 Alpine Linux
避免在 setup.py 中使用 pip 私有模块
0.2.0b1 (2020-01-09)
支持 Windows 64 位
支持 Python 3.8
将 V8 升级到 7.8
支持软内存限制
0.1.18 (2019-01-04)
支持内存和时间限制
0.1.17 (2018-19-12)
升级 libv8
修复内存泄漏
0.1.16 (2018-07-11)
在没有 PyMalloc 的情况下为 Python 添加轮子
0.1.15 (2018-06-18)
为 Python 3.7 添加轮子
0.1.14 (2018-05-25)
添加对 pip 10 的支持
更新包元数据
0.1.13 (2018-03-15)
添加 heap_stats 函数
修复返回的字符串包含空字节的问题
0.1.12 (2018-17-04)
删除对枚举的依赖
0.1.11 (2017-07-11)
添加对centos6的兼容性
0.1.10 (2017-03-31)
添加在调用中传递自定义 JSON 编码器的可能性。
0.1.9 (2017-03-24)
修复 Ubuntu 12.04 和 glibc < 2.17 的编译。
0.1.8 (2017-03-02)
更新目标构建以更好地兼容旧的 Mac OS X 和 linux 平台。
0.1.7 (2016-10-04)
提高 JS 执行的一般性能。
添加构建不同版本的 V8 的可能性(例如使用调试符号)。
修复静态链接库和动态库之间可能发生的冲突。
0.1.6 (2016-08-12)
当 py_mini_racer sdist 构建失败时添加错误消息,要求更新 pip 以下载预编译的轮子而不是源代码分发。
0.1.5 (2016-08-04)
针对静态 Python 构建 py_mini_racer。当针对共享库 python 构建时,它不适用于静态 Python。
0.1.4 (2016-08-04)
确保将 JSEvalException 消息转换为 unicode
0.1.3 (2016-08-04)
修复 python3 的扩展加载
添加用于构建发行版的 make 目标(sdist + Wheels)
修复 python 3 的 eval 转换
0.1.2 (2016-08-03)
修复日期支持
修复 Dockerfile 以生成 python3 轮子
0.1.1 (2016-08-02)
修复 sdist 分发。
0.1.0 (2016-08-01)
PyPI 上的第一个版本。
项目详情
py_mini_racer -0.6.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f71e36b643d947ba698c57cd9bd2232c83ca997b0802fc2f7f79582377040c11 |
|
MD5 | ce07b3bd8ecceea6cbc3f6ff51f1f79f |
|
布莱克2-256 | 5097a578b918b2e5923dd754cb60bb8b8aeffc85255ffb92566e3c65b148ff72 |
py_mini_racer -0.6.0-py2.py3-none-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 97cab31bbf63ce462ba4cd6e978c572c916d8b15586156c7c5e0b2e42c10baab |
|
MD5 | 6d374ecdbac8cb5e44a59ec8aaf40bb0 |
|
布莱克2-256 | 5d7176ac5d593e14b148a4847b608c5ad9a2c7c4827c796c33b396d0437fa113 |
py_mini_racer -0.6.0-py2.py3-none-manylinux1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 42896c24968481dd953eeeb11de331f6870917811961c9b26ba09071e07180e2 |
|
MD5 | a6338e8383e784bb39741a63e5d01eb5 |
|
布莱克2-256 | 29a98ce0ca222ef04d602924a1e099be93f5435ca6f3294182a30574d4159ca2 |