Configuração de multiplos ambientes no Python (pyenv, pip, venv, pipx e poetry)
- Rodrigo Saito
- há 12 minutos
- 7 min de leitura
Fala pessoal, tudo bem?
Quando falamos de multiplos ambientes, devemos sempre pensar que os projetos irão ser criados em tempos diferentes. A medida que o tempo vai passando, em paralelo, teremos versões de linguagens de programação que irão sendo atualizadas (e é exatamente o que acontece com o Python)
Por isso, precisamos de ambientes de versões diferentes para poder suportar multiplos ambientes ou projetos. Cada versão consegue trabalhar com diferentes bibliotecas e versões de bibliotecas, a qual cada projeto irá necessitar.
E porque devemos nos preocupar com o ambiente de dados, já que Python é uma linguagem de programação? Esse assunto não deveria ser interessante somente para os Dev's?
Infelizmente não. Grande parte das ferramentas para qualquer area de dados atualmente, necessita de alguma linguagem de programação e Python é uma das principais atualmente.
Por isso, vamos aprender a utilizar esse conjunto de features e ferramentas, que podem ajudar muito a organizar melhor os ambientes em que estamos trabalhando.
O conjunto que será visto terá a seguinte estrutura:

De modo geral, teremos:
Pyenv --> serve para voce fazer o gerenciamento de ambiente de multiplas versões de python dentro de uma única máquina. (Geralmente essa gestão de diferentes ambientes é feito por separação de pastas)
pip + vEnv -> cuida das instalações de pacotes e versões do Python e suas bibliotecas e da divisões virtuais, fazendo a separação e isolamento das bibliotecas e instalações de cada um dos projetos a serem criados.
pipX --> instalação de pacotes e bibliotecas que serão instaladas globalmente em sua máquina, agindo em todos os ambientes dos diferentes projetos.
poetry -->é a ferramenta que substitui pip + venv, simplifcando as tarefas do dia a dia.
Instalação do Pyenv
Pode ser encontrado em https://github.com/pyenv/pyenv/blob/master/README.md
É uma biblioteca que facilita trabalharmos com diferentes versões do Python para cada projeto em que estivermos trabalhando. Ele basicamente trabalha com diferentes variáveis de ambiente para que cada projeto.
Para o Windows, teremos que usar pyenv-win, que pode ser visto em: https://github.com/pyenv-win/pyenv-win
Para instalar o pyenv-win no PowerShell, abra um interpretador de comando PS e digite/copie a seguinte linha de comando:
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"Provavelmente o erro a seguir irá acontecer:

Execute o seguinte comando para poder executar em sua máquina:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 
Execute novamente o comando anterior:
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"O pyenv-win foi instalado em sua máquina:

Vamos verificar se o interpretador está trabalhjando com o pyenv. Feche o terminal e abra o git bash:
pyenv --versionO resultado será parecido como o abaixo:

Isso aconteceu pois as variaveis de ambiente já estão configuradas. Dentro das variáveis de ambiente, veja as seguintes configurações das variáveis PYENV, PYENV_HOME e PYENV-ROOT, que devem estar apontadas para dentro da instalação do pyenv-win:

Veja que em PATH, há também 2 caminhos que foram adicionados e que estão em cima para serem prioridades na procura dos caminhos:

Configuração de uma versão global de python e outras versões para cada projeto
Para isso será necessário fazer a criação de uma estrutura de pastas para simularmos essa situação. Dentro da sua pasta de usuários, crie uma pasta chamada PyProjects no prompt de comando:
mkdir PyProjects
Entre na pasta criada:
cd PyProjects
Vamos fazer a criação de 3 pastas para 3 diferentes projetos:
mkdir PyPrj_Pandas
mkdir PyPrj_numPy
mkdir PyPrj_Streamlit
Há um comando para verificar quais são as versões de Python instaladas no Pyenv:
pyenv versions
No meu caso, não apareceu nenhuma versão configurada:
Vamos fazer a instalação das versões do Python que precisamos:
pyenv install 3.12.1
pyenv install 3.12.5
pyenv install 3.12.7
Veja novamente as verões de python que estão instaladas em sua máquina:
pyenv versions
Instale a ultima versão disponível, que será a versão Global (até o momento desse blog, é a 3.13.9)

Configuração das utilizações de versão do Python
Versão Global
Vamos deixar a versão mais atual sendo a versão global.
pyenv global 3.13.9
Veja a versão corrente a qual ele atribuiu:
python --version
Versão Específica para cada projeto
Vamos configurar para cada projeto, uma versão específica a ser instalada.
Para isso, entre na pasta do projeto numPy, com o seguinte comando:
cd PyPrj_numPy
Vamos atribuir especificamente para este projeto a versao 3.12.1, digitando o seguinte comando:
pyenv local 3.12.1
Veja que dentro da pasta foi criado um arquivo chamado ".python-version", a qual tem a versão que atribuimos para este projeto.

Agora, vamos fazer a configuração para as outras pastas. Digite o comando abaixo para voltar a pasta anterior:
cd ..
cd PyPrj_Pandas
Configure a próxima versão do Python que esse projeto irá utilizar:
pyenv local 3.12.5
Vá para a ultima pasta dos projetos:
cd ..
cd PyPrj_Streamlit
Configure a próxima versão do Python que esse projeto irá utilizar:
pyenv local 3.12.7
Dessa forma, cada um dos projetos estão utilizando uma versão diferente do Python.
Precisamos tomar cuidado com a versão e com as dependencias do código. Cada projeto terá suas próprias bibliotecas, assim como suas dependencias de outros pacotes.
De o comando abaixo para saber o que voce tem dependencia de pacotes no Python:
pip list
Vamos fazer a instalação das bibliotecas que precisamos instalar nos nosso projetos:
pip install pandas
pip install numpy
pip install streamlit

Veja novamente com o pip list
pip list
Ao invés de termos instalado as bibliotecas para cada projeto específico, flizemos a instalação geral para todos os projetos.
Vamos tentar fazer a desinstalação das bibliotecas principais:
pip uninstall pandas
pip uninstall numpy
pip uninstall streamlit
Na teoria, deveria-se tirar todos os pacotes instalados. Dê o comando pip list para verificar:
pip list
Mesmo fazendo a desinstalação dos 3 pacotes, há várias dependencias que não foram desinstalados. Para fazer a desinslação da seguinte forma:
pip freezeFaça a desinstalação com o comando abaixo, via git bash:

Digite o comando para fazer a desinstalação de todos os pacotes
pip freeze | grep -v "^-e" | xargs pip uninstall -y
Veja novamente a lista de dependencias:
pip list
Pronto, seu pip list estará limpo novamente.
Agora, antes de fazer a instalação de qualquer pacote, vamos criar o ambiente virtual:
Dentro da pasta do Projeto Pandas:
cd PyPrj_PandasDigite o seguinte comando:
python -m venv .venv
Digite o comando:
ls -alPerceba que foi criado uma pasta dentro da pasta corrente chamada .venv (que é o nome do ambient evirtual que voce deu)

Entre dentro da pasta .venv e veja os arquivos que foram criados:
cd .venv
ls
Volte a pasta anterior com o comando:
cd ..Para ativar o ambiente virtual:
source .venv/Scripts/activate
Perceba que há um ambiente ativo (.venv)
Faça a instalação do pandas nesse ambiente virtual:
pip install pandas
Para sair desse ambiente e pasta, dê os comandos:
deactivate
cd ..
Vamos fazer a instalação de bibliotecas especificas para os outros projetos:
cd PyPrj_numPy
python -m venv .venv
source .venv/Script/activate
Faça a instalação do numpy:
pip install numpy
Para sair desse ambiente e pasta, dê os comandos:
deactivate
cd ..
Vamos fazer a criação do ultimo ambiente e a instalação do streamlit
cd PyPrj_Stramlit
python -m venv .venv
source .venv/Script/activate
Vamos fazer a instalação do último pacote:
pip install streamlit
Desative o ambiente e volte a pasta anterior:

Testando os ambientes virtuais
Entre em um dos ambientes e veja as bibliotecas instaladas e a versao do Python que está sendo utilizado:
cd PyPrj_Pandas
source .venv/Script/activate
python --version
pip list
Vamos entrar em outro ambiente virtual. Saia do que voce está:
deactivate
cd ..
Entre em outro projeto, o PyPrj_numpy:
cd PyPrj_Pandas
source .venv/Script/activate
python --version
pip list
Pipx
A ferramenta pip, sendo do próprio python não tem a necessidade de ser instalada. É muito estável e utilizado por milhares de pessoas. Porém uma das grandes desvantagens é a demora de atualizações que o pip tem.
O pipx consegue criar ambientes virtuais por usuários. Se a sua máquina tem vários usuários, é uma boa forma de gerenciar os pacotes por usuários. O usuário x sempre vai ter tais bibliotecas instaladas enquanto o usuário y terão outras.
O pipx será praticamente a sua única biblioteca instalada de forma global.
Para fazer a instalação do pipx de forma global, sem estar conectado em nenhum ambiente, digite:
deactivate
cd ..
pip install pipx
pip list
A documentação do pipx pode ser encontrada em https://pipx.pypa.io
Podemos fazer a instalação de 2 bibliotecas globais. Dessa forma todos os projetos poderão utilizar essas 2 bibliotecas:
pipx install poetry
pipx install ipython
O python da forma tradicional consegue interagir em modo terminal de forma simples:
python -i
Digite exit para sair do modo interativo.
O ipyhton consegue gravar todas as saídas em modo terminal (com comandos mágicos começados por % ou !) e tem melhor visualização na saída do terminal como se fossem celulas (isso deu origem ao jupyter notebook):
ipython -i
Digite exit para sair do modo interativo.
Poetry
Ele tem como objetivo gerenciar melhor as dependencias de pacotes. Mais detalhes pode ser visto em python-poetry.org.
Com o Poetry, ele vai mostrar somente as dependencias da qual voce instalou, segregando das dependencias de dependencias.
Para que o poetry comece a gerenciar as dependencias, digite o comando:
poetry config virtualenvs.in-project trueTalvez seja necessário voce colocar o caminho em que ele faz a instalação no path do seu Windows. Este será o path:

Adicione dentro do Path das variáveis de ambiente do usuário:

Feche o GitBash e abra novamente. Teste novamente dentro da pasta PyProjects:
cd PyProjects
poetry
Digite o comando novamente para o Poetry começar a gerenciar as dependencias:
poetry config virtualenvs.in-project true
Para criar o novo Projeto Django com o Poetry, digite o seguinte comando:
poetry new PyPrj_Django
Entre na nova pasta criada PyPrj_Django, e veja que ele já criou uma série de arquivos.

Vamos configurar para que esse novo projeto utilize uma versao especifica do Python:
pyenv versions
pyenv local 3.13.9
Veja que ele criou o arquivo oculto .python-version, com a versão do python que voce determinou:

Digite o seguinte comando para que o Poetry use essa versao do ambiente do Python:
poetry env use 3.13.9
Para fazer a instalação do Django ensse ambiente, digite o seguinte comando:
poetry add django
Podemos fazer a abertura do arquivo pyproject.toml
Digite "code ." e o VS Studio irá abrir a estrutura de pastas com o arquivo a ser verificado.
code .
Para remover essa biblioteca, digite o comando:
poetry remove django
Dessa forma, conseguimo organizar melhor nosso multiplos projetos em Python.
Esperamos que tenham gostado!
obrigado,
Referencia: https://www.youtube.com/watch?v=9LYqtLuD7z4







Comentários