19 pontos por GN⁺ 2024-03-26 | 7 comentários | Compartilhar no WhatsApp
  • Permite alternar facilmente entre várias versões do Python
  • Segue a tradição UNIX de ferramentas de propósito único: simples, discretas e que funcionam bem
  • Este projeto foi derivado de rbenv e ruby-build e adaptado para Python

O que o pyenv faz

  • Permite alterar a versão global do Python por usuário.
  • Oferece suporte a versões de Python por projeto.
  • Permite sobrescrever a versão do Python usando variáveis de ambiente.
  • Pode pesquisar várias versões do comando Python ao mesmo tempo. Útil para testar entre versões do Python com tox.

O que o pyenv não faz...

  • Não depende do próprio Python. O pyenv é feito com scripts shell puros.
  • Não precisa ser carregado no shell. Em vez disso, usa uma abordagem de shim adicionando um diretório ao PATH.
  • Não gerencia virtualenv. Claro, o usuário pode criar virtualenvs manualmente ou automatizar isso com pyenv-virtualenv.

Como funciona

  • O pyenv intercepta comandos Python usando executáveis shim injetados no PATH, determina a versão do Python especificada pela aplicação e então encaminha o comando para essa instalação do Python.

Entendendo o PATH

  • Ao executar comandos como python ou pip, o sistema operacional procura um executável com esse nome na lista de diretórios da variável de ambiente PATH.

Entendendo os shims

  • O pyenv insere um diretório de shims no início do PATH. Por meio do processo de rehashing, ele mantém shims para todos os comandos Python de todas as versões instaladas do Python.

Entendendo a seleção da versão do Python

  • Ao executar um shim, o pyenv lê e usa a versão do Python das seguintes fontes, nesta ordem:
    1. A variável de ambiente PYENV_VERSION (se definida).
    2. O arquivo .python-version específico da aplicação no diretório atual (se existir).
    3. O primeiro arquivo .python-version encontrado ao pesquisar cada diretório pai até chegar à raiz do sistema de arquivos (se existir).
    4. O arquivo global $(pyenv root)/version.

Encontrando a instalação do Python fornecida pelo pyenv

  • O pyenv encaminha o comando para a instalação do Python correspondente à versão que ele determinou.
  • Cada versão do Python é instalada em seu próprio diretório dentro de $(pyenv root)/versions.

Uso

Instalar versões adicionais do Python

  • Use pyenv install para instalar versões adicionais do Python.

Resolução automática para a versão mais recente

  • Todos os subcomandos do Pyenv, exceto uninstall, resolvem automaticamente prefixos completos para a versão mais recente.

Versões do Python com suporte estendido

  • Existem releases do Python aos quais são aplicados patches fornecidos pelo usuário para adicionar suporte em ambientes específicos.

Alternar entre versões do Python

  • Para usar um Python instalado pelo Pyenv, execute um dos comandos a seguir:
    • pyenv shell
    • pyenv local
    • pyenv global

Remover versões do Python

  • Com o tempo, várias versões do Python se acumulam no diretório $(pyenv root)/versions.
  • Para remover versões antigas do Python, use pyenv uninstall .

Outras tarefas

  • Para ver a lista de todos os subcomandos disponíveis, execute pyenv commands.

Removendo o pyenv

  • É fácil desativar temporariamente o Pyenv ou removê-lo do sistema.

Plugins do Pyenv

  • É possível expandir e personalizar os recursos do Pyenv de forma simples, flexível e fácil de manter usando plugins.

Configuração avançada

  • Existem variáveis de ambiente que controlam o comportamento do Pyenv.

Desenvolvimento

  • O código-fonte do Pyenv é hospedado no GitHub.
  • Os testes são executados com Bats.

Opinião do GN⁺

  • O pyenv é uma ferramenta muito útil para gerenciar várias versões do Python. É especialmente útil para desenvolvedores que precisam usar versões diferentes do Python em múltiplos projetos.
  • Como a ferramenta não depende do próprio Python e é composta por scripts shell puros, é possível instalá-la e gerenciá-la até mesmo em sistemas sem Python instalado.
  • O pyenv não gerencia virtualenv diretamente, mas é prático poder automatizar esse gerenciamento com o plugin pyenv-virtualenv.
  • Como a instalação e o uso são relativamente simples, até engenheiros de software iniciantes que precisem gerenciar versões do Python podem adotá-lo com facilidade.
  • Outra ferramenta com funcionalidades semelhantes ao pyenv é o conda, amplamente usado especialmente nas áreas de ciência de dados e machine learning. Como o conda oferece gerenciamento de pacotes e de ambientes em conjunto, pode ser recomendado para usuários que precisam desses recursos.
  • Ao adotar o pyenv, é preciso ter cuidado se houver várias versões do Python instaladas no sistema, para evitar conflitos de caminho. A vantagem do pyenv é facilitar o gerenciamento de versões, mas uma configuração incorreta pode interferir no caminho padrão do Python no sistema.

7 comentários

 
koxel 2024-03-26

É preciso tomar cuidado com o conda: em empresas de certo porte, é pago.
Mesmo que a empresa seja pequena, se o cliente principal for grande, fica complicado fornecer assim.

 
koxel 2024-03-26

O próprio conda é gratuito sob BSD, mas é bom verificar bem as licenças do repositório e dos pacotes.

 
tujuc 2024-03-26

Eu deixo o asdf configurado como principal em https://asdf-vm.com/

E por projeto às vezes configuro com local, outras vezes uso contêineres...

Como têm surgido muitas opções novas para configurar + gerenciar ambientes, acabo não usando muito mesmo.. hahaha

 
sngwn 2024-03-26

Eu também uso exatamente assim.
Haha, pessoalmente acho que o pyenv ficou com uma cara meio ultrapassada.

 
joyfui 2024-03-26

Como continuam surgindo coisas como rbenv, pyenv e nodenv, no fim acabou aparecendo até o anyenv. hehe
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Comentários do Hacker News
  • Aviso sobre o uso do pyenv

    • O pyenv tem a grande desvantagem de compilar o Python na máquina do usuário.
    • Há muitos modos de falha que podem surgir nessa situação.
    • O pyenv não é uma ferramenta para iniciantes resolverem problemas de empacotamento do Python, mas sim uma ferramenta para especialistas padronizarem configurações.
    • Muitas pessoas enfrentam problemas causados pelo pyenv sem perceber isso.
  • O sofrimento dos programadores Python

    • Surpresa com as dificuldades desnecessárias enfrentadas por programadores Python.
    • Ter que instalar várias versões do Python é algo irracional.
    • A ideia de que um programa em Python funciona em qualquer lugar não é prática.
    • Tudo é frágil e não funciona sem a versão exata da linguagem.
    • Os problemas de dependência são tão sérios que parece ser necessário um gerenciador de gerenciadores de pacotes.
  • Ferramentas para manter programas Python estáveis

    • Lista de ferramentas que garantem que programas Python continuem funcionando da mesma forma que quando foram escritos pela primeira vez.
    • Há várias ferramentas, como requirements.txt, pip, pipenv, pyenv e virtualenv.
  • Apresentação da ferramenta Mise

    • Escrito em Rust, o Mise é como o asdf, mas mais rápido e sem shims por padrão.
    • Instala runtimes em paralelo e baixa os plugins necessários.
    • Pode ser usado como uma ferramenta melhor que asdf ou pyenv.
  • Vantagens do ASDF

    • O ASDF oferece suporte não só a Python, mas também a Rust, Go, Node e várias outras linguagens e ferramentas.
  • Compartilhando experiência com o uso do pyenv

    • No início do uso do pyenv não houve problemas, mas eles apareceram depois de instalar várias versões do Python.
    • Em vez de pyenv, é mais estável baixar o Python em python.org e gerenciar ambientes virtuais com python<version> -m venv /my/virtual/env.
  • Stack pessoal de gerenciamento de Python

    • Gerencia versões do Python com pyenv e cria um novo ambiente virtual com venv para cada projeto.
    • Usa Poetry para inicialização de projetos e gerenciamento de dependências.
    • Se usar Dropbox, adiciona a pasta .venv à lista de ignorados.
    • O pyenv funciona bem no Ubuntu depois de reunir todas as dependências necessárias.
  • Gerenciamento de dependências de runtime com Mise

    • Usa mise para lidar da mesma forma com a maioria das dependências de runtime, como Python, Node, Ruby e Terraform.
    • Também pode ativar ambientes virtuais Python.
  • Compartilhando fluxo de trabalho no macOS

    • Baixa os binários Python necessários em python.org e configura ambientes virtuais com virtualenv.
    • Gerencia projetos com pyproject.toml e pip-compile.
    • Houve muitas mudanças no espaço de gerenciamento de projetos Python, mas esse fluxo de trabalho permitiu ignorar tudo isso.
 
edunga1 2024-03-26

Há muitos modos de falha que podem ocorrer nessa situação.

Acho que este é o ponto mais doloroso.