Python 脚本(Pyodide 引擎)

为脚本选择 Python,就是在与 JavaScript 相同的沙箱规则下用内嵌引擎运行它。引擎只需点击一次即可下载,之后完全离线运行。

Senzoukria · 文档 · 更新于 2026 年 9 月


位置

位置
脚本页面 → 语言 → Python,然后是「Python 引擎」状态条
下载
六个文件,合计约 16.4 MB,只下载一次
已包含
numpy,使用与引擎 ABI 匹配的 wheel
启动预算
启动 120 秒;下载另有 600 秒的预算
脚本预算
每次运行 2 秒,与 JavaScript 相同

它做什么

语言按脚本选择,并随脚本一起保存。两种语言收到相同的数据、返回相同的形态,因此从一种移植到另一种的脚本不会迷路:K 线各列以同名暴露,计算辅助函数保持同样的名称,输出构造器一一对应。

引擎启动本身就是一种一等状态,显示在自己的状态条上,绝不与「脚本正在运行」混为一谈。这个区分很重要:引擎启动需要数秒,而脚本运行只有两秒预算,把两者混在一起会让每一个正确的 Python 脚本看起来都像死循环。

没有任何东西会自动下载。安装需要点击;只有在文件已经存在时才会自动启动。

引擎状态

Python 引擎状态条的逐个状态
状态默认值它改变什么
未安装初始提供「安装 Python 引擎」,并说明一次性下载的大小。
下载中显示百分比,并提供「取消下载」。
正在启动引擎正在启动;脚本会等待,而不是失败。
引擎就绪显示版本号和启动所用的毫秒数,并提供「移除引擎」。
引擎不可用说明引擎未能启动,附上原始信息,并提供「重试」。JavaScript 脚本不受影响。
离线说明始终安装完成后,引擎完全离线运行——没有任何脚本或数据被发送到任何地方。

语言不匹配

以前把 Python 脚本粘贴进一个仍标记为 JavaScript 的草稿里,会得到一个指向任意行的语法错误,外加一条关于 console.log 的建议——而你写的是 Python。现在页面会检查代码是否与声明的语言矛盾并如实说明,还附带一个切换到检测到的语言的按钮。

这项检查刻意保持狭窄:它只寻找那些在另一种语言里必然是语法错误的标志,并且在一份文件同时带有两种语言标志时保持沉默——对一个翻译到一半的脚本,它没有什么有用的话可说。漏检只会让你回到原来那条晦涩的提示;而误报则会让你去改一个本来正确的语言设置。

限制与陷阱

  • 切换语言不会翻译你的代码:代码原样保留,在你重写之前都不会运行。
  • 引擎文件从产品自己的中继地址获取,那是应用内容安全策略允许的唯一远程来源。
  • 引擎版本被固定并与编译出的二进制文件核对;版本混用会被拒绝,而不是产生难以阅读的崩溃。
  • 回测 Python 策略时,循环在 Python 这一侧运行,而不是每根 K 线跨一次语言边界;并有一项对等性测试逐根 K 线比较它与 JavaScript 循环的成交。print() 输出到日志,并以当前 K 线作为前缀。

其他语言版本

常见问题

我的电脑上需要装 Python 吗?
不需要。引擎是内嵌的,由应用下载一次。它不使用、也不需要系统里的 Python 安装。
有哪些库可用?
标准库加上 numpy,后者以与引擎 ABI 匹配的 wheel 形式提供。沙箱内部没有网络访问,因此运行时无法再拉取其他包。
为什么我的 Python 脚本在一个并不存在的行上报语法错误?
这是语言不匹配的典型特征:另一种语言的包装代码被追加到了你的源码后面。切换脚本的语言再运行一次。