You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML中使用PyScript运行Python报sentence_transformers模块缺失错误

报错原因
  • 抛出的ModuleNotFoundError: No module named 'sentence_transformers'直接原因是:PyScript运行在浏览器内置的WASM版本Python(Pyodide)环境中,默认仅自带Python标准库和少量官方预适配的第三方包,不会自动安装代码中import的依赖。
  • 现有代码的<py-env>配置块为空,没有提前声明需要加载的sentence_transformers依赖,运行时找不到对应模块直接触发报错。
  • 当前代码引用的是alpha测试版PyScript资源,对PyTorch这类重型机器学习依赖的WASM适配极差,就算补全依赖声明,也会因为底层依赖没有适配WASM环境触发连锁报错。
  • 代码本身存在冗余逻辑:先后两次实例化SentenceTransformer加载不同模型,第一次加载的模型直接被第二次覆盖,属于无效代码,会额外增加浏览器资源消耗,甚至引发内存溢出导致页面崩溃。
解决方法
  1. 将页面中引用的alpha版PyScript的CSS、JS资源替换为正式稳定版,移除旧alpha版本的资源引用,正式版对WASM第三方包的兼容性明显优于测试版。
  2. 在<py-env>配置块中声明需要加载的依赖,注意:普通PC端Python的wheel包无法在WASM环境运行,必须使用适配Pyodide版本的编译包。基础依赖声明格式如下:
<py-env>
- sentence-transformers
- torch
</py-env>

如果直接声明包名安装失败,提前下载对应版本的WASM编译依赖包存放到本地静态资源目录,在<py-env>中指定本地包路径加载即可。
3. 清理冗余代码:删除第一次实例化SentenceTransformer加载all-MiniLM-L6-v2的无效行,仅保留实际使用的模型初始化逻辑,减少不必要的资源开销。
4. 调整模型加载逻辑:禁止直接写模型名从公网拉取模型文件,浏览器跨域限制、网络波动都会导致模型加载失败。提前将需要用到的sentence-transformers模型文件下载到本地静态资源目录,代码中指定本地模型路径加载。

修正后完整参考代码
<html>
  <head>
    <!-- 替换为本地存放的正式版PyScript资源 -->
    <link rel="stylesheet" href="/static/pyscript/pyscript.css" />
    <script defer src="/static/pyscript/pyscript.js"></script>
    
     <py-env>
       - sentence-transformers
       - torch
       <!-- 本地WASM格式依赖包可在此处补充路径声明 -->
     </py-env>
  </head>
  <body> 
    <py-script> 
from sentence_transformers import SentenceTransformer, util

sentences1 = ['The cat sits outside',
             'A man is playing guitar',
             'The new movie is awesome']

sentences2 = ['The dog plays in the garden',
              'A woman watches TV',
              'The new movie is so great']

# 替换为本地模型存放路径
model = SentenceTransformer('./static/models/all-mpnet-base-v2')
embeddings1 = model.encode(sentences1, convert_to_tensor=True)
embeddings2 = model.encode(sentences2, convert_to_tensor=True)

cosine_scores = util.cos_sim(embeddings1, embeddings2)

for i in range(len(sentences1)):
    print("{} \t\t {} \t\t Score: {:.4f}".format(sentences1[i], sentences2[i], cosine_scores[i][i]))
    print ("___________________________________________________")
    </py-script> 
  </body>
</html>

补充说明:WASM环境运行大体积机器学习模型的性能远低于本地原生Python环境,若加载的模型总资源体积超过300MB,不建议在PyScript中运行此类逻辑,极易出现页面长时间无响应、内存不足崩溃的问题。

内容的提问来源于stack exchange,提问作者ocean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:48:26