Slackjeff Wiki

Juntando bits aprendemos juntos

Ferramentas do usuário

Ferramentas do site


howto:pyenv

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.

howto/pyenv.txt · Última modificação: por 127.0.0.1