Tabela de conteúdos
Gerencie versões e ambientes virtuais do python com pyenv
Uma ferramenta interessante para lidar com as inúmeras versões do python e deixar seus projetos bem isolados da versão do python de seu sistema é o pyenv.
O que é o pyenv?
Como o próprio projeto diz,
Simple Python Version Management: pyenv
Simples gerenciador de versão do python (tradução livre minha). Ele pode se instalar em sua home e temos a possibilidade de escolher quais versões do python instalar, montar um ambiente virtual com uma versão específica do python escolher globalmente a versão desejada ou localmente qual ambiente virtual usar ou a versão, isolando assim o python nativo de sua distro.
Instalação
Vamos inicialmente instalar as dependências para que o python possa ser compilado em seu sistema, no caso do Debian podemos usar a seguinte linha, precisará ter privilégios de superusuário para tal
apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \ libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \ libffi-dev liblzma-dev
no Arch linux, também como superusuário
pacman -S --needed base-devel openssl zlib xz tk
No FreeBSD, também como superusuário:
pkg install shells/bash ftp/curl devel/git databases/sqlite3
Já no GuixSD teremos que emular um shell com as dependências
guix shell -C --emulate-fhs --network --preserve=^SSL_CERT --preserve=^HOME \ --share=$SSL_CERT_DIR --share=/etc/ssl/certs/ --share=$HOME/tmp=$HOME coreutils \ bash wget curl vim git sed grep gawk tar gzip gcc-toolchain pkg-config python\ findutils make zlib openssl bzip2 ncurses libffi readline sqlite xz -- bash
o trecho --share=$HOME/tmp=$HOME especifica que no shell emulado a pasta home estará dentro de um diertório tmp na pasta pessoal, isso é opcional.
Agora é só usar o instalador automático
curl https://pyenv.run | bash
Ao término desse processo o próprio instalador dará um trecho a ser adicionado em seu arquivo .bashrc para que o pyenv se torne acessível, pode copiar e colar o seguinte trecho
export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init - sh)" eval "$(pyenv virtualenv-init -)"
Reinicie seu terminal ou simplesmente faça source .bashrc para ter o comando pyenv disponível.
Instalando versões do python
Para verificar as versões disponíveis do python, faça
pyenv install -l
use o grep caso esteja buscando por uma versão em específico e quer verificar se a mesma está disponível
pyenv install -l | grep 3.12
Caso queira por exemplo o python 3.12 na última revisão basta omitir o terceiro número da versão e executar o comando sem a flag -l
pyenv install 3.12
Definindo a versão do python que será usada
Agora que temos o python na última revisão da versão 3.12 (ou qualquer uma que você tenha instalado - lembre-se que poderá instalar qualquer versão desejada e quantas quiser), podemos usá-la de forma global ao invés do python nativo de seu sistema:
pyenv global 3.12
Ao definir o uso de uma versão de forma global, essa versão estará automaticamente definida em /home/usuario/.pyenv/shims/python, o qual pode ser verificado com whereis python
Assim, toda vez que usar o comando python essa versão que escolhemos é que irá executar, veja que ela esta armazenada na sua home, basta executar o comando
pyenv which python
e verá que a saída é algo do tipo /home/username/.pyenv/versions/3.13.2/bin/python.
Porém podemos optar pelo uso de uma determinada versão num diretório de um projeto, caso não queira organizar esse projeto num ambiente virtual próprio apenas entre na pasta desejada e execute
pyenv local 3.12
e a versão 3.12 será usada sempre que você estiver nesse diretório em específico e em todos os subdiretórios dele.
Definindo ambientes virtuais
Apesar do uso de versões em subpastas, muitas vezes é melhor organizar o projeto em ambientes virtuais construídos para abrigar as dependências daquele projeto. Usando o pyenv fica bem simples fazer essa organização, basta criarmos uma “versão” do pyton que chamaremos com o nome do ambiente desejado. Por exemplo, quero que meu projeto de nome “projetoZ” seja desenvolvido usando o python 3.12.2, então após instalar essa versão podemos usar
pyenv virtualenv 3.12.2 projetoZ
Agora temos uma nova versão chamada “projetoZ”, verifique as versões disponíveis com pyenv versions, dessa forma na pasta de seu projeto (após cd projetoZ) basta usar
pyenv local projetoZ
e por conta da linha eval “$(pyenv virtualenv-init -)” adicionada no .bashrc esse ambiente é ativado automaticamente toda vez que entrar nesse diretório.
Você pode verificar onde estão os arquivos das bibliotecas do python sempre com o comando pyenv which python dentro da pasta de seu projeto.
Conclusão
Temos agora disponível uma ferramenta para buscar por versões do python, instalá-las e isolar as bibliotecas necessárias para cada projeto em específico e seus respectivos ambientes virtuais. Isso traz uma certa vantagem sobre a forma canônica de criar ambientes virtuais no python. Pois ainda é possível selecionar uma versão do python e criar o ambiente virtual na maneira pythônica usando
python -m venv .venv
onde .venv é o nome da pasta que contém o ambiente criado, ative o mesmo usando
source ./.venv/bin/active
Para alguns a forma pythônica é melhor por manter no diretório do projeto as bibliotecas usadas, o pyenv apenas amplia as possibilidades para que você possa desenvolver seus projetos em Python da melhor forma possível.