Quero criar um aplicativo brilhante (usando py-shiny) onde eu gerencio as dependências usando uv
.
Até agora usei o seguinte código
uv init shiny-tester
cd shiny-tester
uv add shiny
vim app.py # see below
uvx shiny run # works as expected
onde escrevo o seguinte app.py
(retirado diretamente do documento oficial ):
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)
Isso funciona conforme o esperado usando uvx shiny run
e o aplicativo é executado.
Quando tento adicionar qualquer outro pacote, por exemplo, numpy
inserindo um import numpy
into app.py
, recebo o erro de que o módulo não pôde ser encontrado porque ainda não o instalei. Para consertar isso, executo uv add numpy
, que funciona e não gera nenhum erro.
Quando eu executo uvx shiny run
, no entanto, ainda recebo o erro
File "/mnt/c/Users/david/Desktop/shiny-tester/app.py", line 2, in <module>
import numpy
ModuleNotFoundError: No module named 'numpy'
Quando eu executo uv run python
e import numpy
o módulo pode ser encontrado e carregado.
Alguma ideia do que pode causar isso e como consertar?
Versão etc.
❯ 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
instalasometool
em um ambiente temporário e isolado . Isso significa que oshiny
executável que está executando seu aplicativo e o que está em seu ambiente virtual não são os mesmos.uv run
é o que você quer: