使用uv与py-shiny时外部依赖模块找不到的问题求助
问题:uv管理依赖时,
uvx shiny run无法找到已安装的numpy模块 问题重现
- 初始化项目并安装依赖:
uv init shiny-tester cd shiny-tester uv add shiny
- 创建
app.py(初始内容运行正常):
from shiny import App, reactive, render, ui # 后续会用到 # import numpy app_ui = ui.page_fluid( ui.input_action_button("action_button", "Action"), ui.output_text("counter"), ) def server(input, output, session): @render.text() @reactive.event(input.action_button) def counter(): return f"{input.action_button()}" app = App(app_ui, server)
- 运行
uvx shiny run,应用正常启动。 - 取消
app.py中import numpy的注释,执行uv add numpy无报错,但再次运行uvx shiny run时出现报错:
File "/mnt/c/Users/david/Desktop/shiny-tester/app.py", line 2, in <module> import numpy ModuleNotFoundError: No module named 'numpy'
- 但执行
uv run python后,在交互环境中import numpy可以正常导入。
原因分析
uvx和uv run的执行逻辑存在差异:
uvx默认会跳过当前项目的虚拟环境,直接调用全局环境中安装的shiny命令,因此无法访问项目依赖里的numpy。uv run则是在当前项目的虚拟环境中执行指定命令,能正确加载pyproject.toml中声明的所有依赖包。
解决方法
有两种可行的解决方式:
方式一:用uv run替代uvx
直接在项目环境中运行shiny命令:
uv run shiny run
方式二:让uvx使用当前项目环境
通过--project参数指定uvx加载当前项目的依赖:
uvx --project shiny run
版本信息
- uv版本:
uv 0.4.17 pyproject.toml依赖配置:
[project] name = "shiny-tester" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ "numpy>=2.1.1", "shiny>=1.1.0", ]
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

