如何在Brython中安装外部模块,requests模块导入失败如何解决
问题根因
你无法在Brython中直接导入常规CPython生态的requests模块,核心原因是requests底层依赖操作系统套接字接口,而Brython运行在浏览器沙箱环境中,没有对应底层接口支持,标准库也没有内置适配浏览器环境的requests实现。
requests功能替代方案
Brython内置了适配浏览器XMLHttpRequest/fetch API的网络请求模块browser.ajax,可以完全替代requests实现网络请求功能,可直接使用,示例代码如下:
<html> <head> <script src="https://cdn.jsdelivr.net/npm/brython@3.8.10/brython.min.js"> </script> <script src="https://cdn.jsdelivr.net/npm/brython@3.8.10/brython_stdlib.js"></script> </head> <body onload="brython()"> <script type="text/python"> from browser import ajax, document, alert def on_complete(req): if req.status == 200 or req.status == 0: alert(req.text) # 可将返回内容赋值给输入框 document["zone"].value = req.text else: alert("请求错误:" + req.statusText) def send_request(e): # 发起GET请求示例 ajax.get("目标请求地址", oncomplete=on_complete) # 发起POST请求示例语法 # ajax.post("目标请求地址", data={"参数名":"参数值"}, oncomplete=on_complete) document["mybutton"].bind("click", send_request) </script> <input id="zone"><button id="mybutton">click !</button> </body> </html>
Brython安装外部模块的通用方法
如果是适配了Brython运行环境的第三方模块,可通过以下三种方式安装导入:
- 方式1:如果模块已被收录到Brython标准库扩展,直接在导入模块前调用
browser.install方法指定需要安装的模块名即可 - 方式2:如果是自定义模块,将
.py模块文件上传到你的站点静态资源目录,Brython会自动按照导入路径加载对应的模块文件 - 方式3:如果是纯Python实现且不依赖CPython专属底层接口(如socket、系统级os调用等)的第三方模块,可通过
brython-cli add-module命令将模块打包后引入到你的项目中
内容的提问来源于stack exchange,提问作者Samuel Liebert
相关产品推荐
相关产品推荐

