使用uv构建独立Marimo笔记本脚本报错:找不到marimo命令
问题:使用uv启动Marimo笔记本时提示找不到
marimo命令 我想制作一个独立的Python文件,通过uv在后台将依赖安装至uv缓存,运行脚本后直接启动Marimo笔记本以简化分发流程。我编写了如下代码:
#!/usr/bin/env -S uv run -- marimo edit main.py # /// script # requires-python = ">=3.12" # dependencies = [ # "marimo", # "numpy", # "matplotlib", # ] # /// import marimo app = marimo.App() @app.cell def _(): import marimo as mo return mo @app.cell def _(): mo.md("## Hello, Marimo!") return
运行时出现错误:
error: Failed to spawn: `marimo` Caused by: No such file or directory (os error 2)
问题根源
你的shebang行写法有误:#!/usr/bin/env -S uv run -- marimo edit main.py 会让uv直接尝试调用marimo可执行文件,但此时uv还未安装marimo依赖——uv只有在运行Python脚本时才会解析/// script注释里的依赖配置,而当前命令是让uv启动外部的marimo程序,它不会先处理当前脚本的依赖。
修正方案
有两种可行的修改方式:
方式一:在脚本内启动Marimo编辑模式
修改shebang让uv运行当前脚本,然后在脚本末尾添加代码启动Marimo:
#!/usr/bin/env -S uv run # /// script # requires-python = ">=3.12" # dependencies = [ # "marimo", # "numpy", # "matplotlib", # ] # /// import marimo import subprocess import sys app = marimo.App() @app.cell def _(): import marimo as mo return mo @app.cell def _(): mo.md("## Hello, Marimo!") return if __name__ == "__main__": # 通过Python模块方式调用marimo编辑当前文件,避免路径问题 subprocess.run([sys.executable, "-m", "marimo", "edit", __file__], check=True)
运行逻辑:uv先解析/// script注释安装所有依赖,再执行脚本代码,最后调用Marimo编辑当前文件。
方式二:让uv先加载依赖再执行marimo命令
修改shebang使用--script参数,让uv先读取当前脚本的依赖配置,再执行marimo命令:
#!/usr/bin/env -S uv run --script -- marimo edit main.py # /// script # requires-python = ">=3.12" # dependencies = [ # "marimo", # "numpy", # "matplotlib", # ] # /// # 以下为Marimo笔记本内容 import marimo app = marimo.App() @app.cell def _(): import marimo as mo return mo @app.cell def _(): mo.md("## Hello, Marimo!") return
运行逻辑:uv通过--script参数读取当前脚本的依赖注释,安装完成后执行marimo edit main.py命令。
内容的提问来源于stack exchange,提问作者henrikstroem
相关产品推荐
相关产品推荐

