如何在浏览器前端运行Python程序

前端开发的Python学习笔记 快速开始 经过上述流程,已经安装好了Python环境,并且尝试了第一行代码,使用命令行和VSCode都做了运行。但是现在的一个问题就是,依赖会被迫安装到全局,这会影响项目的独立性,难以管理。解决这个问题的方案,后续文章《Python虚拟环境》将会解决这个问题。 阅读详情
AI摘要

传统 Web 开发中,Python 多用于后端,JavaScript 用于前端。如今,借助 WebAssembly 及 Python-to-JavaScript 转译方案,可在前端运行 Python 代码。本文介绍了 Pyodide、Brython、Transcrypt 等方案,分析其优缺点,并给出不同场景下的选择建议。

如何在前端运行 Python 程序

在传统的 Web 开发中,Python 通常更多地被用作服务器端语言(如 Django、Flask 等),而在浏览器端(前端)通常使用 JavaScript 来操作 DOM、进行事件处理等。不过,随着 WebAssembly 技术的发展和一些 Python-to-JavaScript 转译方案的出现,我们已经可以在前端直接运行(或间接编译)Python 代码。

下面将详细介绍在前端运行 Python 程序的多种主要方式、它们的优点和局限性,并附带一些示例或基本使用思路。


一、直接在浏览器运行 Python:基于 WebAssembly 的 Pyodide

1. 什么是 Pyodide

Pyodide 是基于 WebAssembly 的一个完整 Python 解释器项目,它将 CPython(Python 的官方解释器)编译成了可以在浏览器环境(或者其它 WebAssembly 运行环境)里执行的版本。换句话说,你不需要安装任何插件,只要浏览器支持 WebAssembly,你就可以在前端环境里运行几乎完整的 Python。

2. Pyodide 的主要特点

  • 兼容性好:几乎完整移植了 CPython,包括标准库和部分第三方库的支持(如 NumPy、Pandas 等)。
  • 易集成:官方提供了一个 pyodide.js(或 pyodide.mjs),前端只要将其引入即可使用。
  • WebAssembly 性能:相较于纯 JavaScript 解释 Python 的方案,Pyodide 的性能更好。

3. 如何使用 Pyodide

  1. 引入 pyodide.js
    从官方的 CDN 或者本地托管,引入 Pyodide 脚本:

    <script src="https://cdn.jsdelivr.net/pyodide/v0.23.4/full/pyodide.js"></script>
    

    提示:版本号可能会不断更新,可以去 Pyodide Releases 查看最新版本。

  2. 初始化 Pyodide 环境

    <script>
      async function initPyodide() {
        // 加载 Pyodide
        let pyodide = await loadPyodide();
        // 在这里就可以使用 pyodide.runPython 执行 Python 代码了
        let result = pyodide.runPython(\`
          import sys
          sys.version
        \`);
        console.log("Python version:", result);
      }
      initPyodide();
    </script>
    
  3. 执行 Python 代码

    • pyodide.runPython(code) 可以直接执行一段 Python 代码字符串,并返回最后一行表达式的值(如果有)。
    • pyodide.globals 可以获取当前 Python 解释器中全局作用域的变量。
    • 除了执行简单的脚本外,还可以加载第三方库(部分纯 Python 库已经预编译到 Pyodide 里)。

    示例:

    <script>
      async function initPyodide() {
        let pyodide = await loadPyodide();
        // 安装 / 加载一些包
        await pyodide.loadPackage("micropip");
        // micropip 可以安装更多的 Python 包,但需要兼容 WASM,如 pyodide.org 中提到的包
    
        // 运行简单的 Python 代码
        let code = \`
        import math
        def compute_circle_area(r):
            return math.pi * (r ** 2)
        area = compute_circle_area(5)
        \`;
        pyodide.runPython(code);
        let area = pyodide.globals.get("area");
        console.log("Circle area:", area);
      }
      initPyodide();
    </script>
    
4. 优缺点
  • 优点:
    • 几乎完整地支持 Python 生态,能够直接使用很多 Python 包,尤其是科学计算相关。
    • 依赖 WebAssembly,高度还原 CPython 功能,运行效率相对其他纯 JS 解释器更高。
  • 缺点:
    • 体积较大,需要加载编译好的 Python 解释器和相关包,初次加载可能会比较耗时。
    • 并非所有 Python 包都能在 Pyodide 中使用,一些依赖本地 C/C++ 扩展的库需要专门移植。

二、Brython:将 Python 作为浏览器脚本语言

1. 什么是 Brython

Brython 是一款用 JavaScript 实现的 Python 解释器,它的目标是让 Python 可以取代前端开发中 JavaScript 的地位。它提供了一个运行时环境,使用纯 JavaScript 解释 Python 语法,并且封装了一系列 DOM 操作、浏览器接口等,使得你可以像写 JavaScript 一样来操作浏览器对象。

2. Brython 的使用

  1. 引入 Brython
    <script src="https://cdn.jsdelivr.net/npm/brython@3.11.0/brython.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/brython@3.11.0/brython_stdlib.js"></script>
    
  2. HTML 标记与启动
    在 <body> 标签中添加 onload="brython()" 或者用 JavaScript 的方式在 DOM 加载后初始化 Brython:
    <body onload="brython()">
      ...
    </body>
    
  3. 在 <script type="text/python"> 中编写 Python
    Brython 允许我们直接在 HTML 文件中使用 <script type="text/python"> 标签来书写前端 Python 代码,如:
    <script type="text/python">
    from browser import document, alert
    
    def greet(ev):
        alert("Hello from Brython!")
    
    document["mybutton"].bind("click", greet)
    </script>
    
    这里 document["mybutton"] 与 JavaScript 中的 document.getElementById("mybutton") 类似。

3. 优缺点

  • 优点:
    • 使用非常简单,直接 <script type="text/python"> 就能写代码。
    • 对 DOM 操作进行了一定的封装,可以让 Python 代码操作浏览器 API。
    • 代码体积相对 Pyodide 更小(毕竟没有完整移植 CPython)。
  • 缺点:
    • Brython 并不包含完整的 Python 标准库实现,某些场景下功能有限。
    • 由于是纯 JavaScript 解释,需要考虑性能影响,复杂运算性能可能远低于 WebAssembly 方案。
    • 一些 Python 第三方库可能无法直接使用,或需要依赖特定的 Polyfill。

三、Transcrypt:Python 转译成 JavaScript

1. 什么是 Transcrypt

Transcrypt 是一个将 Python 代码编译成高质量、可读性较高的 JavaScript 代码的工具。可以在开发阶段用 Python 编写逻辑,然后通过 Transcrypt 将其编译成 JavaScript,最终在浏览器端运行的还是 JavaScript。

2. 工作流程

  1. 安装 Transcrypt:
    pip install transcrypt
    
  2. 使用 Transcrypt 编译 Python 文件:
    transcrypt -b -m myscript.py
    
    • -b 表示在浏览器模式下编译(browser)。
    • -m 表示生成映射文件(source map)。
  3. 编译完成后,会生成一个 __javascript__ 文件夹,里面有 myscript.js 以及依赖文件。
  4. 在 HTML 中引入编译后的 JS 文件:
    <script src="__javascript__/myscript.js"></script>
    
  5. 这样,就可以在浏览器端使用转换后的 JS 逻辑。

3. 优缺点

  • 优点:
    • 保持了 Python 语法的开发体验。
    • 得到的 JavaScript 体积相对较小,且没有额外的运行时依赖。
    • 编译后的速度与 JavaScript 本身类似(毕竟最终产物是 JS)。
  • 缺点:
    • 并不是在浏览器里直接执行 Python,而是将 Python 转译成 JS,某种程度上要对 Python 语法有一定限制。
    • 对于 Python 的某些动态特性和部分库支持不完美。

四、Skulpt、RapydScript 等其他方案

除上述方案外,还有一些项目也能帮助在前端运行(或近似运行)Python:

  1. Skulpt

    • 纯 JavaScript 实现的 Python 解释器。
    • 支持 Python 语法的子集,适用于教学或简单脚本场景。
    • 不支持完整标准库。
  2. RapydScript

    • 一种 Python-like 语法,编译成高效的 JavaScript。
    • 更接近于一种独立的语言,兼具 Python 与 JavaScript 的特性。
  3. Trinket、Replit 等在线平台

    • 通过远程服务器或 WebAssembly 内嵌的方式,在网页里直接运行 Python 代码。
    • 适合教学、演示或小型项目试验。

五、适合不同场景的选择建议

  1. 如果你希望在浏览器端完整运行 Python 并使用科学计算库(如 NumPy、Pandas 等)

    • Pyodide 是首选方案,但要注意加载速度、兼容性以及内存使用。
  2. 如果你想在前端用 Python 语法来操作 DOM,替代部分 JavaScript 功能

    • Brython 可以尝试,不过要注意第三方库的支持以及性能。
  3. 如果你的核心需求仍然是将 Python 逻辑转成最终的 JavaScript

    • Transcrypt 可以帮助你在保持 Python 开发体验的同时,得到优化后的纯 JS 代码。
  4. 如果你是教学或简单的 Python 脚本交互

    • Skulpt、Trinket 这类项目或在线平台可以快速上手,但功能相对有限。

六、总结

在浏览器里运行 Python 不再是遥不可及的想法,随着 WebAssembly 的普及和多种 Python-to-JavaScript 解决方案的出现,前端与 Python 生态之间的融合将越来越紧密。选择具体方案时,需要综合考虑:

  • 是否需要大量使用 Python 第三方库?
  • 对性能与包体积的要求如何?
  • 是否需要调用浏览器的 DOM 或 Web API?
  • 是否只是教学、实验,还是要应用到生产环境?

无论是直接基于 WebAssembly 的 Pyodide、JavaScript 实现的 Brython,还是把 Python 编译/转译为 JavaScript 的 Transcrypt,都是在不同场景下可选的思路。未来,随着 Web 技术的进一步发展,前端与 Python 的结合也会更容易、更高效。希望以上介绍能帮助你更好地理解和选择前端运行 Python 的最佳方式。

2024年在浏览器中用Python做数据科学:Pyodide Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助! 阅读详情

相关推荐

浏览器中的Python:Brython

将Python代码转换为JavaScript,使我们能够在浏览器中编写和运行Python代码。可以实现python和js代码相互调用。基于Python 3 实现,支持HTML5环境(提供了DOM对象和事件接口)。支持turtle绘图库,可以进行图像绘制。Brython会把绘图程序转换成svg格式的动画。Brython仅支持本机Python模块,不支持C内置的Python模块,除非已在JavaScript中重新实现。由于Brython在Web浏览器的上下文中运行,因此存在一些限制。

weixin_68789096的博客 397

在网页中执行python

2、在这testpyscript.html和data.py文件目录下执行终端,也就命令行(windows)在网页中执行python,脚本,也就是在html中写python,或者引入python脚本代码。也就引入pyscript库,调用python脚本。

一休 5643

校园网自动登录全攻略:从浏览器方案到Python脚本

统一身份认证是高校数字服务的通行入口,但每天重复输入账号密码的体验让人疲惫。理解CAS认证流程与Cookie机制,是实现自动登录的关键。从浏览器自带的密码管理,到油猴脚本自动填充提交,再到Python会话维持与定时任务,三种方案覆盖了从轻量便捷到无人值守的不同需求。面对前端动态渲染、隐藏参数校验、会话过期等常见问题,也需要一套可落地的排查思路。本文以校园网场景为例,系统拆解自动登录的底层原理与工程实践,帮你用最低成本构建自己的自动化登录方案。

weixin_29190651的博客 292

在浏览器中用Python做数据科学:Pyodide

Pyodide是Mozilla的一个实验性项目,用于创建一个完全在浏览器中运行的完整的Python数据科学技术栈。 Pyodide的动机来自于Mozilla的另一个项目Iodide的工作,在早先的一个博客中我们介绍了它。Iodide是一个基于最新Web技术的用于数据科学实验和交流的工具。值得注意的是,它被设计来在浏览器中而不是在远程内核中执行数据科学计算。 不幸的是,我们在浏览器中所用...

python学习者的博客 2516

Python全栈入门到实战【JavaScript篇 01】JavaScript入门与浏览器运行环境,解锁前端交互的核心

如果你已经习惯了Python的交互式终端(Python REPL),那么浏览器的Console就是前端世界的"Python REPL"。你可以在Console中直接输入JavaScript代码,浏览器会立即执行并显示结果——不用创建文件、不用保存、不用刷新页面。Console是你学习JavaScript最好的"练习本"。在本篇教程的学习过程中,强烈建议你每学一个语法点,都立刻打开Console敲一遍。JavaScript是前端交互的唯一语言,Python全栈开发者必须掌握它才能打通前后端的完整数据链路。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 2206

使用Python和Flask在Linux上创建应用程序

Flask是一个轻量级的Python Web框架,它提供了构建Web应用程序所需的基本功能。在本文中,我将向您展示如何在Linux操作系统上使用Python和Flask创建一个简单的应用程序。上述代码首先导入了Flask模块,并创建了一个名为app的Flask应用程序对象。这就是使用Python和Flask在Linux上创建简单应用程序的基本过程。您可以根据自己的需求扩展和定制应用程序,添加更多的路由和功能。在您选择的目录中,创建一个新的Python脚本文件,例如app.py。步骤2:创建应用程序文件。

PixelLogic的博客 290

【亲测免费】 探秘Pyodide:Web上的Python运行环境

是一个开源项目,它将Python解释器和标准库移植到了Web浏览器中,让开发者能够在网页上直接运行Python代码,无需服务器交互或安装额外软件。借助于WebAssembly的技术,Pyodide实现了在浏览器内高效执行Python程序的能力。 ## 技术分析 ### WebAssembly WebAssembly是现代Web开发的一种低级虚拟机格式,它可以以接近原生的速度运行编译后的代码。...

gitblog_00070的博客 2171

华大HC32F460 TCP Client 实验

华大HC32F460 TCP Client 实验

ZhuoWuKeJi的博客 647

浏览器可以运行 Python 代码了,Python 也许会变成前后端通吃的语言

你好,我是征哥,作为 Python 程序员,我很羡慕那些 Javascript 开发者,动不动就能写出令人惊艳的网页。不过今年,我们也能用 Python 写前端了:Anaconda 团队开发出了 PyScript,你可以在 HTML 里面编写和运行 Python 代码,调用 Javascript 库,换句话说,你可以用 Python 来进行整个前后端开发。什么是 PySc...

somenzz的博客 1126

Python爬虫实战:手把手教你用Selenium绕过药监局网站的反爬机制(附完整代码)

本文详细介绍了如何使用Selenium绕过药监局网站的反爬机制,提供了一套完整的Python爬虫实战方案。通过浏览器指纹伪装、动态等待策略、会话维持技巧以及分布式采集设计,帮助开发者高效爬取药监局数据,解决政府类网站常见的反爬挑战。

weixin_42620255的博客 737

告别手动群发!用IDA Pro和CE搞定企业微信4.1.38.6011的HOOK开发(附完整代码)

本文详细介绍了如何利用IDA Pro和Cheat Engine进行企业微信4.1.38.6011的HOOK开发,实现自动化群发功能。从逆向工程环境配置、关键函数定位到HOOK框架设计,提供完整代码示例,帮助企业提升运营效率。

weixin_42533120的博客 476

002python医院管理系统小程序医院预约挂号就诊体检档案药品器械健康提醒管理(源码+运行视频+讲解视频)

前端:小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者后端:开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 5.X版本 数据库工具:Navicat11 开发软件:PyCharm 浏览器:谷歌浏览器(理论上都可以)

weixin_mrw479640的博客 300

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 582

【零基础专属方法】html调用本地python程序进行交互 前后端交互

HTML调用本地python程序,实现前后端实时交互,项目展示

南城果宝的满腹经纶 2万+

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

一旦结果与预测差距较大,可能存在光伏系统的问题,需要找出原因,然后采取适当措施来修复光伏系统并做出更好的决策。例如,根据准确的预测,光伏系统运营商可以平衡电力消耗,并将多余的电力储备用于紧急情况。然而,光伏系统的发电量估算是一个挑战,因为光伏系统的发电量受到天气条件的极大影响。整个项目文件夹(第一个文件夹为xgboost模型相关的包文件,xg.py是xgboost模型英文注释版本,xg_chinese.py是xgboost模型中文注释版本)表示空气的温度,通常以摄氏度(°C)或华氏度(°F)为单位。

2301_79699110的博客 3025

win10解决IE浏览器安装不上的问题(卸载依然显示不能安装)

目前win10 系统不支持外部ie安装程序,所以必须用win10自带的应用来安装 一、错误的卸载的方式 在控制面板的当前安装的程序界面是看不到ie的,需要选择控制面板左上角的启用或关闭windows功能 将ie11前面的勾勾去掉 这种方法是很多网站上的误区,其实这并没有卸载成功ie只是把ie的功能关闭了,但是他还在你的电脑上。你可以理解为我们说的对文件夹执行的隐藏文件夹功能。那个隐藏的文件夹依...

清平乐的技术专栏 3万+

有什么是python不能做的吗_python不能做什么

python不能做的事:1、Python不适用于设备驱动程序。2、Python不能在一些非常小的计算机上使用。3、Python并不真正在浏览器中运行。4、Python不便于携带。5、Python对某些用途来说太慢了。这个问题可以解读为“列出Python语言无法做到的所有事情”。下面我列出了Python不能做的一些事情。1、Python不适用于设备驱动程序。设备驱动程序必须超快且响应速度快。Pyth...

weixin_39664962的博客 837

Docker 实战:使用 Docker Desktop 在 MacOS 上安装 Docker

在这采用 Docker Desktop 在 Mac 上来安装 Docker。Docker Desktop 是 Docker 的管理桌面 IDE,提供了一个直观的GUI(图形用户界面),允许您直接在本机上管理容器、应用程序以及镜像。适用于 Mac、Linux 以及 Windows 环境,允许您构建、共享和运行容器化应用程序和微服务。Docker Desktop 可以大大降低在复杂配置上的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题和其他默认设置,并定期更新 Bug 修复和安全更新。

SmartSi 8002

安卓前端和python后端_android – 在移动应用程序中结合html前端和python“后端”...

我的应用程序有一个基于html的前端,并在后端使用python逻辑.这个应用程序需要离线运行,而不是连接到互联网,因此这里的“后端”我并不是指远程运行的服务器,而是与浏览器/ html在同一个应用程序中并行运行的python逻辑发动机.对于Windows或Mac桌面应用程序,我构建了一个Chromium Embedded Framework应用程序,然后启动一个子进程,该子进程运行使用py2exe...

weixin_36314729的博客 577

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 373

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python微信小程序的美容院管理系统61564

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。数据库 mysql 版本不限数据库工具:Navicat/SQLyog等都可以小程序端运行软件 微信开发者工具/hbuiderx(1)微信开发者工具: 提供小程序开发、调试、发布等功能,用于前端开发。(2)Node.js/java/python/php: 用于后端服务搭建和逻辑处理。(3)MySQL/MongoDB: 用于数据存储和管理,设计合适的数据库结构。

QQ242219979的博客 1289

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

小程序 Python公共厕所管理系统

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。数据库 mysql 版本不限数据库工具:Navicat/SQLyog等都可以小程序端运行软件 微信开发者工具/hbuiderx(1)微信开发者工具: 提供小程序开发、调试、发布等功能,用于前端开发。(2)Node.js/java/python/php: 用于后端服务搭建和逻辑处理。(3)MySQL/MongoDB: 用于数据存储和管理,设计合适的数据库结构。

bishe288的博客 682

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

1.1纯python web前端开发框架dash,什么是python dash

Dash是用于构建Web分析应用程序的高效Python框架,我自己测试了下发现其他的页面也能写 Dash基于Flask,Plotly.js和React.js,是使用纯Python使用高度自定义用户界面构建数据可视化应用程序的理想选择。它特别适合使用Python处理数据的任何人,还有就是讨厌前端javascript页面开发的人。 通过几个简单的模式,Dash提取了构建基于Web的交互式应用程序所需的所有技术和协议。Dash非常简单。 Dash应用程序在Web浏览器中呈现。您可以将应用程序部署到服务器,然

1329

前端周刊第十一期

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 前端周刊发表每周前端技术相关的大事件、文章教程、一些框架的版本更新、以及代码和工具。每周定期发表,欢迎大家关注、转载。 如果外链不能访问,关注公众号**「前端每周看」**,里面有解决办法 大事件 大事件!大事件!浏览器可能支持运行 Typescript啦——今天,我们很高兴地

m0_56069948的博客 119

python cgi库_从 Python 快速启动 CGI 服务器

很多人知道 Python 3 可以快速启动一个 HTTP 服务器:$ python3 -m http.server 8000今天我查阅 http.server 模块发现它支持运行 CGI 脚本,只要加上 --cgi 选项。入门 Web 后端的初学者一定是要学习 CGI 的(不管是学历史还是学概念都有好处),而配置 Apache / NGINX 环境对他们来说可能比较困难。我发现用 Python 这...

weixin_39806679的博客 129

Python 之父:移动设备中的 Python 应用“又大又慢”!

凌云时刻近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置大量机器学习算法,Python 在开发者中逐渐流行起...

云布道师 383
上一篇: PouchDB 详细介绍
下一篇: Pyodide详细介绍及使用
maply
博客等级 码龄18年 3493粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值