MacOS下ClojureScript集成js-pytorch失败,求解决调用报错问题
js-pytorch与ClojureScript集成问题解决方案
可能的问题根源及修复步骤
1. 依赖导入方式错误
ClojureScript导入npm包需使用ES模块语法,确保正确引用js-pytorch的默认导出对象:
(ns your.app.namespace (:require ["js-pytorch" :as torch])) ; 正确的导入方式
避免使用错误的命名空间导入(如:require [js-pytorch.core :as torch]),这会导致无法识别模块导出。
2. Shadow-CLJS未配置Bun作为包管理器
Shadow-CLJS默认使用npm/yarn,需显式指定使用Bun处理依赖,避免兼容性问题:
修改shadow-cljs.edn添加Bun配置:
{:deps true :npm {:package-manager :bun} ; 关键配置:指定Bun为包管理器 :builds {:app {:target :browser :output-dir "public/js" :asset-path "/js" :modules {:main {:init-fn your.app.namespace/main}} :devtools {:repl true}}}}
3. 依赖安装不完整或损坏
删除现有node_modules和bun.lockb,重新执行:
bun install
确保js-pytorch被正确安装到依赖目录。
4. REPL执行时机过早
浏览器环境下模块异步加载,直接在REPL启动后调用torch/randn会因模块未加载完成报错。可通过以下方式规避:
- 先执行初始化函数触发模块加载:
(defn main [] (let [tensor (torch/randn (clj->js [2 3]))] (println "Tensor:" (.toString tensor)))) (main) ; 调用初始化函数加载模块 - 或在REPL中手动完成模块加载后执行:
(require ["js-pytorch" :as torch]) (torch/randn (clj->js [2 3]))
5. 环境兼容性验证
先在Bun原生REPL中验证js-pytorch可用性,排除包本身问题:
bun repl
在Bun REPL中执行:
const torch = require('js-pytorch'); console.log(torch.randn([2, 3]));
若此处正常输出张量,则问题出在ClojureScript集成环节。
完整配置文件示例
deps.edn
{:deps {org.clojure/clojurescript {:mvn/version "1.11.60"} thheller/shadow-cljs {:mvn/version "2.26.2"}}}
package.json
{ "dependencies": { "js-pytorch": "^0.1.12" } }
内容的提问来源于stack exchange,提问作者madeinQuant
相关产品推荐
相关产品推荐

