"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O empacotamento Python é ótimo agora: `uv` é tudo que você precisa

O empacotamento Python é ótimo agora: `uv` é tudo que você precisa

Publicado em 01/09/2024
Navegar:794

Python Packaging is Great Now: `uv` is all you need

O título desta postagem é uma referência ao Python Packaging is Good Now da Glyph. Acho que é seguro dizer que, nestes 8 anos, passamos de “Bom” para “Ótimo”. Continue lendo para saber meu raciocínio.

O que torna o empacotamento Python difícil para iniciantes?

Afirmo que as duas principais dificuldades para empacotamento Python são

  • Bootstrapping, ou seja, como começar!
  • Ativação, ou seja, como funcionam os venvs em Python (veja meu tópico do Mastodon, é tão difícil de explicar!)

Bootstrapping era um problema frequentemente negligenciado. Deveríamos dizer às pessoas para instalarem o Python em https://python.org? A distribuição Anaconda? Como podemos impedir que as pessoas usem o gerenciador de pacotes do sistema e corram o risco de quebrar tudo?

E não se esqueça de todo o ciclo de vida do ambiente virtual. É tão louco como fiquei entorpecido com isso como usuário de Python de longa data, mas toda vez que tenho que explicar, vejo os rostos dos meus alunos e penso "isso não está bem".

Claro, existem outros problemas, como como construir e publicar pacotes distribuíveis. Mas afirmo que isso não afeta a maioria dos iniciantes do Python. Além disso, eles também estão em processo de tratamento. Continue lendo.

Digite UV

Em 15 de fevereiro, Astral lançou uv e eu abandonei o navio imediatamente. Como parte do meu trabalho, tenho que instalar rotineiramente muitas dependências potencialmente conflitantes, e o uv foi um alívio imediato.

Mas o interessante é que agora o uv foi muito além de sua fase inicial de "pip mais rápido" e está cumprindo sua promessa de ser "um gerenciador de projetos e pacotes Python abrangente que é rápido, confiável e fácil de usar".

Voltando aos problemas de inicialização e ativação que mencionei no início, como o uv os resolve? Considere isto:

  • uv não depende do próprio Python. Binários autônomos pré-compilados podem ser facilmente instalados em Linux, macOS e Windows.
  • uv python gerencia versões do Python! Não há necessidade de recorrer a mecanismos específicos do sistema operacional, como pyenv, deadsnakes, ou a ferramentas pesadas como conda.
  • A ferramenta uv gerencia ferramentas em ambientes centralizados! Não há mais necessidade de pipx ou fades.
  • uv init cria um pyproject.toml barebones usando hatchling como backend de construção e um layout src funcional com um README vazio e um módulo fictício.
    • Se precisar de algo mais sofisticado, você sempre pode usar copiadora ou cortador de biscoitos com algum modelo mais sofisticado.
  • uv add adiciona dependências ao pyproject.toml, cria um venv se não existir, e os instala!
  • uv lock cria um arquivo de bloqueio com todas as suas dependências, que você pode usar na sincronização uv.
    • E se você quiser um bom e velho requirements.txt, uv pip compile faz isso por você, assim como pip-tools!
  • uv run executa scripts e comandos, novamente sem ativar explicitamente os ambientes!

Essencialmente, isto:

$ mkdir uv-playground
$ cd uv-playground
$ uv init
warning: `uv init` is experimental and may change without warning
Initialized project `uv-playground`
$ uv add click
warning: `uv add` is experimental and may change without warning
Using Python 3.12.3 interpreter at: /usr/bin/python3
Creating virtualenv at: .venv
Resolved 3 packages in 66ms
   Built uv-playground @ file:///tmp/uv-playground
Prepared 2 packages in 430ms
Installed 2 packages in 0.62ms
   click==8.1.7
   uv-playground==0.1.0 (from file:///tmp/uv-playground)
$ tree
.
├── pyproject.toml
├── README.md
├── src
│   └── uv_playground
│       ├── __init__.py
└── uv.lock

3 directories, 4 files
$ uv run python -c "from uv_playground import hello; print(hello())"
warning: `uv run` is experimental and may change without warning
Hello from uv-playground!

Portanto, à pergunta "como faço para começar a aprender Python no meu computador", agora você pode responder universalmente: "instalar uv".

Algumas reflexões

No tópico de ambientes virtuais, concordo essencialmente com Armin quando ele diz

npm escapou sem qualquer equivalente de "ativação" e acho que um futuro ecossistema Python também não terá mais muita utilidade na ativação virtualenv.

Também notei que uv init escolheu hatchling. Sempre tive uma ligeira preferência pelo PDM, mas acho que este pode ser um ponto sem volta.

Leah e seus colaboradores tiveram muito trabalho para criar este diagrama de decisão para o guia de empacotamento PyOpenSci. Mas o fato de que agora existe uma linha de base que as pessoas podem mudar caso tenham necessidades mais específicas (por exemplo, um back-end de construção compatível com Meson ou scikit-build) novamente fornece uma experiência de desenvolvedor muito melhor.

Na Conda

O tópico conda vs pip é outra fonte comum de confusão. Eu era um usuário e fã do conda desde o primeiro dia, e isso efetivamente salvou o Python de uma morte muito clara em um momento em que era muito difícil apenas instalar coisas no Windows.

Nos anos que se seguiram, muitas vezes me referi ao antigo post de Jake VanderPlas explicando as diferenças, mas agora parece uma causa perdida.

Os problemas de interoperabilidade entre pip e conda nunca foram totalmente resolvidos e, embora eu ache que o pessoal da Pixi está fazendo um trabalho fantástico, acho que no longo prazo o uv vencerá.

Reconheço plenamente que os pacotes conda são melhor estruturados em torno da noção de código não-Python e que o mundo atual de "rodas gordas no PyPI" é claramente uma solução abaixo do ideal. Mas todo o ecossistema se moveu nessa direção: a maioria dos pacotes agora publica rodas pré-compiladas para uma rica variedade de plataformas.

Em outras palavras: o conda pode não ser tão útil em 2024 como era em 2014, e talvez seja hora de parar de ensiná-lo para iniciantes e considerá-lo uma ferramenta avançada.

Conclusão

A razão pela qual é um pouco cedo é que alguns desses comandos uv ainda são experimentais e podem evoluir no futuro. Mas, pela primeira vez, vejo claramente uma ferramenta de fluxo de trabalho compatível com os padrões, abrangente, livre de problemas de inicialização, cuidadosamente projetada e que pode vencer.

O que muitos críticos de embalagens Python queriam o tempo todo, certo? Não ter que escolher entre muitas ferramentas diferentes. Mas acho que o uv foi muito além disso e resolveu outros problemas de experiência do desenvolvedor, pelos quais estou feliz e agradecido.

Estou efetivamente usando UV para tudo e não estou olhando para trás. Continuarei recomendando esta ferramenta a todos, continuarei falando sobre ela e espero que ela se torne mais difundida.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/astrojuanlu/python-packaging-is-great-now-uv-is-all-you-need-4i2d?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3