我想创建一个闪亮的应用程序(使用 py-shiny),在其中我使用 来管理依赖项uv
。
到目前为止我已经使用了以下代码
uv init shiny-tester
cd shiny-tester
uv add shiny
vim app.py # see below
uvx shiny run # works as expected
我在其中写入以下内容app.py
(直接取自官方文档):
from shiny import App, reactive, render, ui
# will be used later
# 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
,应用程序也能运行。
当我尝试添加任何其他包时(例如,numpy
通过将 插入import numpy
到 中app.py
),我收到错误消息,提示无法找到模块,因为我尚未安装它。为了解决这个问题,我运行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
可以找到并加载该模块。
知道是什么原因造成这种情况以及如何解决吗?
版本等
❯ uv --version
uv 0.4.17
❯ cat 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",
]
❯ head uv.lock
version = 1
requires-python = ">=3.12"
resolution-markers = [
"platform_system != 'Emscripten'",
"platform_system == 'Emscripten'",
]
[[package]]
name = "anyio"
version = "4.6.0"
uvx sometool
安装sometool
到临时的、隔离的环境中。这意味着shiny
运行应用程序的可执行文件和虚拟环境中的可执行文件不一样。uv run
是你想要的: