pyenv vs asdf: Qual gerenciador de versões do Python para CI?
O pyenv gerencia apenas versões do Python; o asdf gerencia Python mais todas as outras linguagens a partir de um único arquivo .tool-versions.
O pyenv é um gerenciador de versões do Python focado que instala e troca interpretadores via .python-version. O asdf é um gerenciador multilinguagem que lida com Python (via plugin) junto de Node, Ruby e mais em um único arquivo .tool-versions.
| pyenv | asdf | |
|---|---|---|
| Linguagens gerenciadas | Apenas Python | Muitas (plugins) |
| Arquivo de pin | .python-version | .tool-versions |
| Melhor para | Repos só de Python | Repos poliglotas |
| Alternativa em CI | Geralmente setup-python | Uma ferramenta para todas as linguagens |
| Build do Python | Compila interpretadores | Via plugin python (pyenv por baixo) |
No CI
Para um repo só de Python, o pyenv (ou o setup-python da GitHub lendo o .python-version) é o caminho mais leve. Para repos poliglotas, o asdf fixa Python e todas as outras linguagens em um único arquivo - e seu plugin de Python usa o pyenv por baixo, então você obtém os mesmos interpretadores com pinning unificado. O asdf adiciona setup de plugin, mas elimina a necessidade de vários gerenciadores separados.
Fixe e faça cache
Commite o .python-version ou o .tool-versions para que o CI faça build do interpretador local exato, e faça cache dos interpretadores compilados quando possível (compilar Python é lento). O build roda nos runners de CI; runners gerenciados mais rápidos encurtam as compilações de interpretador a frio.
O veredito
Repo só de Python querendo setup mínimo: pyenv (ou setup-python). Repo poliglota querendo uma ferramenta e um arquivo de pin para cada linguagem: asdf. Commite o arquivo de versão de qualquer forma para um CI reproduzível.