在浏览器中轻松运行Python程序

微软开源的markitdown项目,将office文件转换为markdown格式,迅速成为github热门项目。但其python程序特性限制了非技术用户的易用性。本文介绍如何利用webassembly技术,结合pyodide在浏览器中直接运行markitdown,解决这一问题。

Pyodide是一个将Cpython移植到WebAssembly/Emscripten的开源项目,支持所有Python语法,并允许使用micropip在浏览器中安装和管理Python包,包括许多带有C扩展的常用包(如regex、pyyaml、lxml、numpy、pandas等)。Pyodide还提供强大的JavaScript⟺Python外部函数接口,实现两种语言的无缝衔接。

在浏览器环境中运行MarkItDown面临两个主要挑战:文件传输和依赖安装。

挑战与解决方案:

文件传输: 通过将用户选择的文件传递到Worker中的Python运行时解决。

立即学习“Python免费学习笔记(深入)”;

依赖安装: 由于中国大陆对PyPI访问的限制,需要寻找替代方案,例如使用自定义的PyPI镜像。

最终,我们成功构建了一个完全在浏览器中运行的MarkItDown工具,可在office file to markdown体验。

以下是在Worker中运行Python的核心代码:

// eslint-disable-next-line no-undefimportScripts('https://testingcf.jsdelivr.net/pyodide/v0.26.4/full/pyodide.js')async function loadPyodideAndPackages() {  // eslint-disable-next-line no-undef  const pyodide = await loadPyodide()  globalThis.pyodide = pyodide  await pyodide.loadPackage('micropip')  const micropip = pyodide.pyimport('micropip')  // micropip.set_index_urls([  // 'https://pypi.your.domains/pypi/simple',    // ])  await micropip.install('markitdown==0.0.1a2')}const pyodideReadyPromise = loadPyodideAndPackages()globalThis.onmessage = async (event) => {  await pyodideReadyPromise  const file = event.data  try {    console.log('file', file)    const startTime = Date.now()    globalThis.pyodide.FS.writeFile(`/${file.filename}`, file.buffer)    await globalThis.pyodide.runPythonAsync(`from markitdown import MarkItDownmarkitdown = MarkItDown()result = markitdown.convert("/${file.filename}")print(result.text_content)with open("/${file.filename}.md", "w") as file:  file.write(result.text_content)`)    globalThis.postMessage({      filename: `${file.filename}.md`,      content: globalThis.pyodide.FS.readFile(`/${file.filename}.md`, { encoding: 'utf8' }),      time: Date.now() - startTime,    })  }  catch (error) {    globalThis.postMessage({ error: error.message || 'convert error', filename: file.filename })  }}

在浏览器中轻松运行Python程序

在浏览器中轻松运行Python程序

该方案巧妙地利用了WebAssembly和Pyodide的优势,为非技术用户提供了一个更便捷的Office文件转Markdown工具。 代码注释清晰,易于理解。

以上就是在浏览器中轻松运行Python程序的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1355184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 19:04:42
下一篇 2025年12月10日 23:09:12

相关推荐

  • 如何在地图中追踪步骤,代码降临 ay 6

    advent of code 2024: day 6 – guard patrol optimization I’m a bit behind on my Advent of Code challenges this year due to unforeseen circum…

    2025年12月13日
    000
  • 使用 Python 抓取 Google 搜索结果

    利用python高效抓取google搜索结果,洞悉数据趋势! Google每天处理超过85亿次搜索,占据全球搜索引擎市场91%的份额,蕴藏着巨大的数据价值,可用于SEO优化、竞争分析、潜在客户开发,以及高级LLM模型的训练和自然语言处理能力的提升。然而,直接抓取Google数据并非易事,需要专业的技…

    2025年12月13日
    000
  • 机器学习工程师路线图

    成为机器学习工程师的阶梯式学习路径 这份路线图清晰地规划了成为机器学习工程师所需的技能学习路径,循序渐进,由浅入深,并注重实践操作。 基础阶段:夯实根基 数学基础: 扎实的数学功底是机器学习的基石。你需要掌握概率论(理解事件发生的可能性)、统计学(分析和解释数据)、以及离散数学(处理离散值)等核心概…

    2025年12月13日
    000
  • Python 最佳实践:编写简洁且可维护的代码

    Python以其简洁性和可读性而闻名,深受初学者和资深开发者的喜爱。然而,编写干净、易于维护的代码需要超越基本语法。本文将探讨一些提升Python代码质量的关键最佳实践。 PEP 8规范的力量 PEP 8是Python的代码风格指南,遵循它能显著提升代码的可读性和可维护性。以下是一些核心原则: # …

    2025年12月13日
    000
  • 新手常见的 Python 面试问题

    本文将探讨10个常见的Python面试问题,帮助应届生顺利应对面试。 1. 解释型语言的概念 解释型语言由解释器逐行执行,其动态特性深受开发者青睐,便于调试和开发,并提供即时反馈。 2. Python的主要特性 立即学习“Python免费学习笔记(深入)”; Python是一款功能强大的跨平台编程语…

    2025年12月13日
    000
  • 使用 DQN 构建国际象棋代理

    我最近尝试用dqn构建一个国际象棋ai代理。 任何了解DQN和国际象棋的人都会告诉你这是个不太现实的想法。 确实如此,但作为一名初学者,我依然乐于尝试。本文将分享我的经验和心得。 环境理解 在实现代理之前,我需要熟悉环境并创建一个自定义包装器,以便在训练过程中与代理交互。 我使用了kaggle_en…

    2025年12月13日 好文分享
    000
  • Python While 循环教程 #Day3

    This Python code implements several functions using while loops to solve various number-related problems: 1. Armstrong Number: An Armstrong number is …

    2025年12月13日
    000
  • PyTorch 中的 fmod

    pytorch 的 fmod() 函数详解:模运算的利器 本文将详细介绍 PyTorch 中 fmod() 函数的功能、使用方法以及一些需要注意的细节。fmod() 函数用于执行模运算(取余),它可以处理不同形状的张量以及标量,并提供灵活的输出选项。 功能概述: fmod() 函数计算两个张量或一个…

    2025年12月13日
    000
  • 用 Python 解决每周挑战任务 1 和 0

    一、每周挑战赛简介 Mohammad S. Anwar 组织的每周挑战赛是一场友好的编程竞赛,参赛者需解决两个任务。它鼓励各水平的开发者参与学习、交流和娱乐。 本篇文章将重点介绍每周挑战赛第 302 周的任务 1:“一和零”的 Python 解法。 二、任务 1:一和零 立即学习“Python免费学…

    2025年12月13日
    000
  • 锤击清单

    每周挑战301:穆罕默德·安瓦尔 (Mohammad Anwar) 的算法挑战 穆罕默德·安瓦尔每周都会发布“每周挑战”,提供练习编程的绝佳机会。他先用 Python 编写解决方案,再转换成 Perl。让我们来看看本周的挑战及其解决方案。 挑战一:最大数字 任务: 给定一个正整数列表,将其中的元素重…

    2025年12月13日
    000
  • 入门级 Bing 壁纸刮刀

    构建 Bing 壁纸自动下载器:准备工作与代码实现 本指南将引导您创建一个简单的 Python 脚本,自动下载 Bing 的每日壁纸。我们将分析 Bing 壁纸网页元素和 API,并提供完整的代码示例。 一、关键组件分析 Bing 壁纸 API: Bing 提供了一个 JSON API 接口,用于访…

    2025年12月13日
    000
  • 系统设计的重要元素和要记住的事情

    系统设计是构建满足特定需求的系统架构、模块、接口和数据的过程,是软件开发中至关重要的环节,直接影响系统的可扩展性、可维护性、可靠性和性能。本文将深入探讨关键的最佳实践,并辅以代码示例。 1. 深入理解问题领域 在编码之前,务必透彻理解待解决的问题,这包括: 用户需求: 明确系统使用者、目标和工作流程…

    2025年12月13日
    000
  • 只需几分钟即可在 Ubuntu 上设置 Anaconda:简化您的 AI 工作流程

    在数据科学、机器学习或人工智能项目管理中,选择合适的工具至关重要。anaconda是一个强大的python库,简化了包、依赖项和环境的管理。无论是资深ai模型开发者,还是数据科学领域的新手,anaconda都能提供良好的开端。 本指南将逐步指导您如何在Ubuntu上使用安装脚本安装Anaconda,…

    2025年12月13日 好文分享
    000
  • 掌握快速排序:计算机科学的基本算法

    快速排序简介 在广阔的算法和数据结构世界中,快速排序是最优雅、最高效的排序方法之一。它的简单性和有效性使其成为开发人员和研究人员的最爱。无论您是致力于优化代码还是只是对现代计算系统如何处理大型数据集感到好奇,了解快速排序都是非常宝贵的。 快速排序的本质 快速排序基于分而治之的策略,该策略涉及将复杂的…

    好文分享 2025年12月13日
    000
  • 在 Python 中注释函数

    最近,我撰写了一篇关于TypeScript函数注释的博文。 深入研究后,我了解了更多关于Python函数注释的知识。 本文将使用与上一篇博文类似的示例,讲解Python函数的注释方法。 您可以通过将python.analysis.typecheckingMode设置为basic、standard或s…

    2025年12月13日
    000
  • 创建令人惊叹的全景变得简单

    全景摄影:捕捉广阔视野的艺术 全景照片以其令人叹为观止的广阔视野和细节展现,在摄影领域独树一帜。然而,传统全景照片制作过程繁琐复杂,需要精确对齐和耗时的后期拼接。 现在,有了Luminar Neo的AI照片拼接功能,这一切都将变得简单易行。这款革命性软件让每个人都能轻松创作出令人惊艳的全景杰作,无需…

    2025年12月13日
    000
  • Python 字符串:探索字符串操作方法

    Python 字符串详解: 字符串是 Python 中用单引号或双引号括起来的字符序列。 例如: “你好,世界!”‘Python’“这是个问题吗?” 字符串类型: 单行字符串: 使用单引号 ( ‘这是一个字符串’ ) 或双引号 ( “这也是一个字符串” ) 创建。 print(‘hello worl…

    2025年12月13日
    000
  • 探索 Python 编程世界

    python:程序员挚爱的多功能编程语言 Python凭借其简洁易懂的语法和强大的功能,近年来已成为备受青睐的编程语言。无论是编程新手还是经验丰富的开发者,都能轻松上手Python并从中受益。本文将深入探讨Python的核心特性、应用领域以及它广受欢迎的原因。 为什么选择Python? 易读易用: …

    2025年12月13日
    000
  • 全球发展和增长的污泥管理和脱水概述

    污泥管理与脱水市场深度分析 Stellar Market Research 近期发布的报告,对全球污泥管理与脱水市场进行了全面评估。报告显示,2023年市场规模达49.2亿美元,预计到2030年将增长至91.8亿美元,复合年增长率为9.3%。 报告范围与研究方法 本报告深入分析了污泥管理与脱水市场的…

    2025年12月13日
    000
  • 了解 Python 术语:模块、包、库和框架

    学习编程语言时,理解专业术语至关重要。Python中的模块(module)、包(package)、库(library)和框架(framework)经常出现,但它们之间的区别并不总是清晰明了。本文旨在阐明这些概念,并通过示例说明其差异。 1. 模块 Python模块是一个包含Python代码的单个文件…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信