Python 脚本(Pyodide 引擎)
为脚本选择 Python,就是在与 JavaScript 相同的沙箱规则下用内嵌引擎运行它。引擎只需点击一次即可下载,之后完全离线运行。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- 脚本页面 → 语言 → Python,然后是「Python 引擎」状态条
- 下载
- 六个文件,合计约 16.4 MB,只下载一次
- 已包含
- numpy,使用与引擎 ABI 匹配的 wheel
- 启动预算
- 启动 120 秒;下载另有 600 秒的预算
- 脚本预算
- 每次运行 2 秒,与 JavaScript 相同
它做什么
语言按脚本选择,并随脚本一起保存。两种语言收到相同的数据、返回相同的形态,因此从一种移植到另一种的脚本不会迷路:K 线各列以同名暴露,计算辅助函数保持同样的名称,输出构造器一一对应。
引擎启动本身就是一种一等状态,显示在自己的状态条上,绝不与「脚本正在运行」混为一谈。这个区分很重要:引擎启动需要数秒,而脚本运行只有两秒预算,把两者混在一起会让每一个正确的 Python 脚本看起来都像死循环。
没有任何东西会自动下载。安装需要点击;只有在文件已经存在时才会自动启动。
引擎状态
| 状态 | 默认值 | 它改变什么 |
|---|---|---|
| 未安装 | 初始 | 提供「安装 Python 引擎」,并说明一次性下载的大小。 |
| 下载中 | — | 显示百分比,并提供「取消下载」。 |
| 正在启动 | — | 引擎正在启动;脚本会等待,而不是失败。 |
| 引擎就绪 | — | 显示版本号和启动所用的毫秒数,并提供「移除引擎」。 |
| 引擎不可用 | — | 说明引擎未能启动,附上原始信息,并提供「重试」。JavaScript 脚本不受影响。 |
| 离线说明 | 始终 | 安装完成后,引擎完全离线运行——没有任何脚本或数据被发送到任何地方。 |
语言不匹配
以前把 Python 脚本粘贴进一个仍标记为 JavaScript 的草稿里,会得到一个指向任意行的语法错误,外加一条关于 console.log 的建议——而你写的是 Python。现在页面会检查代码是否与声明的语言矛盾并如实说明,还附带一个切换到检测到的语言的按钮。
这项检查刻意保持狭窄:它只寻找那些在另一种语言里必然是语法错误的标志,并且在一份文件同时带有两种语言标志时保持沉默——对一个翻译到一半的脚本,它没有什么有用的话可说。漏检只会让你回到原来那条晦涩的提示;而误报则会让你去改一个本来正确的语言设置。
限制与陷阱
- 切换语言不会翻译你的代码:代码原样保留,在你重写之前都不会运行。
- 引擎文件从产品自己的中继地址获取,那是应用内容安全策略允许的唯一远程来源。
- 引擎版本被固定并与编译出的二进制文件核对;版本混用会被拒绝,而不是产生难以阅读的崩溃。
- 回测 Python 策略时,循环在 Python 这一侧运行,而不是每根 K 线跨一次语言边界;并有一项对等性测试逐根 K 线比较它与 JavaScript 循环的成交。print() 输出到日志,并以当前 K 线作为前缀。
相关页面
其他语言版本
常见问题
- 我的电脑上需要装 Python 吗?
- 不需要。引擎是内嵌的,由应用下载一次。它不使用、也不需要系统里的 Python 安装。
- 有哪些库可用?
- 标准库加上 numpy,后者以与引擎 ABI 匹配的 wheel 形式提供。沙箱内部没有网络访问,因此运行时无法再拉取其他包。
- 为什么我的 Python 脚本在一个并不存在的行上报语法错误?
- 这是语言不匹配的典型特征:另一种语言的包装代码被追加到了你的源码后面。切换脚本的语言再运行一次。