Configurando um Ambiente de Desenvolvimento Python

Saiba como podemos instalar o Python em um ambiente de desenvolvimento local e como gerenciar múltiplas versões do Python para projetos distintos

Quer começar a estudar ou trabalhar em alguma demanda com Python, e não sabe por onde começar para configurar seu ambiente? Já trabalha com Python, mas tem dificuldade em gerenciar diferentes versões da linguagem, ou gerenciar dependências conflitantes de diferentes projetos? Problemas como esses são muito frequentes quando estamos trabalhando paralelamente em mais de um projeto.

Neste artigo vamos falar sobre como podemos instalar o Python em um ambiente de desenvolvimento local e como gerenciar múltiplas versões do Python para projetos distintos. Além disso, vamos abordar a questão de gerenciamento de dependências, e qual é a forma padrão de resolvermos este problema no Python.

TLDR

  1. Instale o  pyenv. 
  2. Instale as versões do Python desejadas com o  pyenv. 
  3. Defina no  pyenv  a versão global do Python desejada.
  4. Defina no projeto a versão local do Python com o  pyenv. 
  5. Crie o ambiente virtual do projeto com o  venv. 
  6. Ative o ambiente virtual do projeto.

 

O Python do Sistema Operacional

Antes de começarmos a trabalhar em um projeto com Python, precisamos primeiro instalar ele no nosso computador. Dependendo do sistema operacional que estivermos usando, o computador pode já ter alguma versão do Python instalada. O Ubuntu 22.04, por exemplo, vem com o Python 3.10, e o macOS 13.0.1 vem com o Python 3.9. Já o Windows não vem com nenhuma versão do Python.

Para verificar se o Python está disponível no sistema, podemos abrir um terminal e usar o comando  which.  No Ubuntu 22.04 por exemplo, temos a seguinte saída para este comando:

which python3

/usr/bin/python3

O comando  which  retorna o diretório onde um determinado comando é encontrado no sistema. No exemplo acima, podemos ver que o comando  python3  está localizado no diretório  /usr/bin. 

O diretório de instalação do Python pode variar de acordo com o sistema operacional. No macOS 13.0.1, por exemplo, o Python pode ser encontrado no seguinte diretório:

which python3

/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9

E para verificar qual a versão exata do Python está instalada, basta rodar o seguinte comando:

python3 –version

Python 3.10.6

Embora seja possível trabalhar com essa versão do Python que vem instalada com o sistema – também chamada de Python do sistema – eventualmente vamos precisar de versões diferentes. Seja por algum projeto que utilize uma versão mais antiga, ou por um projeto que utilize uma versão mais nova. E tentar alterar a versão do Python do sistema não é algo recomendado, pois isso pode ocasionar em falhas de componentes que dependem dessa versão específica.

Por esse motivo, é uma boa prática não atualizar e nem utilizar o Python do sistema para desenvolvimento. Para trabalhar em projetos novos ou já existentes, vamos instalar uma nova versão dele no nosso computador.

Opções de Instalação do Python

Existem várias formas de instalar o Python, dependendo do sistema operacional. Podemos ir no site oficial do Python (python.org) e fazer o download do instalador para o nosso sistema. Também podemos utilizar algum gerenciador de pacotes, como o APT do Linux, ou o Homebrew do macOS. E podemos até mesmo fazer o build a partir do código fonte do Python.

Porém, destas formas, como resultado, teremos uma única versão do Python instalada e configurada no nosso ambiente. E quando precisarmos utilizar uma versão diferente dele, teremos que remover a versão anterior e instalar uma nova.

Isso até pode não parecer um grande problema para alguém que pretenda trabalhar apenas com um único projeto. Porém, é muito comum estarmos trabalhando paralelamente em diferentes projetos, que utilizem versões distintas do Python. E, ainda que a versão atendesse ao requisito de um dos projetos, deixaria de atender ao requisito dos outros.

Dadas as necessidades apresentadas até aqui, surge então a pergunta: de que forma prática podemos ter mais de uma versão do Python disponível em nosso computador, e sem interferir com a versão do Python do sistema? Em resposta a essa necessidade, surgiu a ferramenta  pyenv

 pyenv.  é um gerenciador de versões do Python, que possibilita facilmente instalar simultaneamente diferentes versões do mesmo no nosso ambiente, e facilmente alternar entre elas.

Na seção a seguir vamos ver como instalar e configurar o  pyenv  em nosso computador.

Instalando o pyenv

Neste artigo vamos abordar o procedimento de instalação no Linux e no macOS. Caso você esteja utilizando o Windows, existe uma versão não oficial do pyenv para ele. Porém essa ferramenta não instala versões nativas do Python, o que pode fazer com que você não tenha alguma funcionalidade específica do Python no Windows. Outra opção no Windows é utilizar o Windows Subsystem for Linux (WSL), no qual você pode utilizar uma distribuição Linux dentro do Windows.

Para instalar o  pyenv  no Linux ou no macOS, vamos utilizar o instalador automático pyenv-installer:

wget -qO- https://pyenv.run | bash

Em seguida, precisamos configurar o ambiente do nosso shell para funcionar com o  pyenv.  O exemplo abaixo serve para o zsh, mas é muito similar ao procedimento para o bash, mudando apenas o arquivo de inicialização do shell:

echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.zshrc

echo ‘command -v pyenv >/dev/null || export

PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.zshrc

echo ‘eval “$(pyenv init -)”‘ >> ~/.zshrc

exec “$SHELL

Caso você esteja usando algum outro shell, consulte as instruções de configuração do  pyenv. 

Antes de instalarmos o Python com o  pyenv,  precisamos configurar as dependências que a ferramenta precisa para fazer o build de cada versão do Python. E cada sistema operacional pode apresentar uma forma diferente de instalar essas dependências. Neste artigo mostraremos os comandos necessários para o Ubuntu e o macOS.

Para instalar as dependências no Ubuntu:

sudo apt update; sudo apt install build-essential libssl-dev \

zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl \

libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \

libffi-dev liblzma-dev

E para instalar as dependências no macOS:

brew install openssl readline sqlite3 xz zlib tcl-tk

As saídas para os dois comandos acima foram omitidas pois, além de poderem ser muito extensas, elas podem variar muito em função dos componentes que você já possui instalado no seu sistema. E, caso você esteja usando algum outro sistema operacional, a documentação do pyenv tem orientações de configuração para outros sistemas populares. [2]

Agora que temos o  pyenv  instalado e configurado no ambiente, e todas as dependências necessárias, na seção seguinte veremos como podemos instalar a versão do Python que queremos utilizar.

Instalando o Python com o pyenv

Agora que temos o  pyenv  devidamente configurado, podemos instalar as versões do Python. Para saber quais versões e distribuições do Python estão disponíveis para instalação, podemos usar o seguinte comando:

pyenv install –list

Available versions:

:

:

:

3.10.11

3.11.0

3.11-dev

3.11.1

3.11.2

3.11.3

3.12.0a7

3.12-dev

:

:

:

Não exibimos a saída completa do comando acima pois a lista é muito grande. Vamos instalar a versão 3.11.3, que é a última versão estável disponível na data de escrita deste artigo:

pyenv install 3.11.3

O comando de instalação acima pode demorar um pouco para finalizar, pois a versão que escolhemos – assim como a maioria das versões disponibilizadas pelo  pyenv  – é compilada a partir dos códigos fonte do Python. [1]

E agora podemos listar as versões que já temos disponíveis para uso:

pyenv versions

* system (set by /Users/dmertins/.pyenv/version)

3.11.3

Como podemos ver, temos a versão do sistema, e a versão 3.11.3, que acabamos de instalar. O asterisco na saída acima indica que a versão do sistema está configurada para uso.

Podemos então alterar a versão do Python para ser utilizada globalmente no nosso ambiente:

pyenv global 3.11.3

Agora vamos verificar novamente a configuração do  pyenv: 

pyenv versions

system

* 3.11.3 (set by /Users/dmertins/.pyenv/version)

Podemos ver pelo asterisco que agora o  pyenv  já está configurado com a versão que acabamos de instalar. E podemos também rodar o comando  python  para verificar se a versão configurada no  pyenv  está sendo detectada corretamente pelo nosso terminal:

python –version

Python 3.11.3

A saída acima mostra que agora, ao rodar o comando  python,  nosso terminal está utilizando a versão do Python que acabamos de configurar no  pyenv. 

E vamos supor que a gente também precise de uma versão mais antiga do Python, como por exemplo a 3.9.16. Vamos aproveitar e instalar essa versão:

pyenv install 3.9.16

Em seguida vamos configurar essa versão para uso global no  pyenv: 

pyenv global 3.9.16

Verificando agora a configuração do  pyenv,  podemos ver todas as versões instaladas disponíveis, e que agora a versão 3.9.16 está em uso:

pyenv versions

system

* 3.9.16 (set by /Users/dmertins/.pyenv/version)

3.11.3

Agora que vimos como instalar e configurar diferentes versões do Python com o  pyenv,  vamos ver na próxima seção como podemos configurar diferentes projetos com versões distintas do Python.

Configurando o Python do Projeto com o pyenv

Vamos supor que queremos começar um novo projeto com Python, e podemos optar por escolher a versão mais atual do Python. Escolhemos então a versão 3.11.3, que acabamos de instalar na seção anterior.

Inicialmente vamos criar um novo diretório para esse projeto, e alterar o diretório do terminal para este novo diretório:

mkdir new-python-project

cd new-python-project

new-python-project $

E agora dentro deste novo diretório vamos verificar qual a versão do Python está configurada no  pyenv: 

new-python-project $ pyenv version

3.9.16 (set by /Users/dmertins/.pyenv/version)

Podemos ver que a versão detectada dentro do diretório é a versão global do Python que configuramos no  pyenv  por último – 3.9.16 – que não é a versão que queremos.

Nós poderíamos configurar a versão global novamente para a 3.11.3 e começar a trabalhar no novo projeto. Mas em vez disso, vamos aproveitar para utilizar mais uma das funcionalidades que o  pyenv  oferece.

Anteriormente, quando configuramos a versão do Python, utilizamos o comando  pyenv global,  que definiu globalmente a versão no ambiente. Porém, também temos a possibilidade de configurar uma versão local – ou seja, podemos configurar uma versão para um diretório específico:

new-python-project $ pyenv local 3.11.3

new-python-project $ pyenv version

3.11.3 (set by /Users/dmertins/new-python-project/.python-version)

Como podemos ver especificado no caminho entre parênteses ao lado da versão, agora a versão do Python dentro deste diretório está configurada em um arquivo dentro do próprio diretório. Desta forma, o  pyenv  detecta automaticamente a versão do Python definida para o projeto, sem que a gente precise alterar a configuração global.

Agora que temos a versão local do Python devidamente configurada no diretório, estamos prontos para criar um ambiente virtual e começar a trabalhar no novo projeto. A utilização de ambientes virtuais é uma prática muito comum quando trabalhamos com Python, pois eles permitem isolar e gerenciar as dependências de cada projeto. Para isso, a linguagem disponibiliza um módulo nativo em sua biblioteca padrão: o venv. [3]

Para criar e ativar o ambiente virtual do projeto, podemos usar os seguintes comandos:

new-python-project $ python -m venv .venv

new-python-project $ source .venv/bin/activate

(.venv) new-python-project $

O prefixo  (.venv)  exibido no início da linha do prompt do terminal na saída acima indica que o ambiente virtual do projeto foi ativado. Após isso, também podemos verificar em que local o comando  python  está sendo localizado pelo terminal, e qual a sua versão:

(.venv) new-python-project $ which python

/Users/dmertins/new-python-project/.venv/bin/python

(.venv) new-python-project $ python –version

Python 3.11.3

Como podemos ver na saída acima, quando o ambiente virtual está ativo, o Python detectado no terminal está localizado em um diretório dentro do próprio projeto, isolado do Python global. Além disso, vemos que a versão utilizada para criar esse ambiente virtual foi a mesma que configuramos localmente no projeto com o  pyenv. 

Finalmente, agora que temos a versão local do Python do projeto configurada, e o ambiente virtual criado e ativado, estamos prontos para poder começar a desenvolver o novo projeto de forma isolada. Podemos instalar quaisquer dependências necessárias, sem que isso interfira nas versões globais do Python, ou nas dependências de outros projetos existentes no nosso ambiente.

E para desativar o ambiente virtual:

(.venv) new-python-project $ deactivate

new-python-project $

Agora vamos supor que surgiu uma outra demanda Python para trabalharmos em paralelo. E que este projeto utiliza a versão 3.9.16 do Python. Precisamos então seguir as etapas análogas ao que fizemos anteriormente:

  • Criar um novo diretório para o projeto.
  • Definir a versão local do Python com o pyenv.
  • Criar e ativar o ambiente virtual do projeto com o venv.

E caso apareça alguma demanda que utilize uma versão do Python que ainda não temos, podemos facilmente instalar ela com o  pyenv. 


As ferramentas gerenciadoras de versão não são uma exclusividade do Python. Se você já trabalhou com outras linguagens como, por exemplo, Node.js, Java ou Ruby, provavelmente já deve ter se deparado com alguns gerenciadores de versão dessas linguagens, tais como Node Version Manager (nvm)SDKMAN! ou Ruby Version Manager (RVM). Afinal, a necessidade de facilmente instalar e gerenciar diferentes versões é algo bastante comum quando se trabalha com a maioria das linguagens.

Com a utilização do  pyenv  para gerenciar nossas versões do Python, nós podemos desenvolver sem ter que utilizar a versão do Python do sistema. Depois que a ferramenta está instalada e configurada, podemos facilmente instalar novas versões do Python, além de podermos intercalar entre versões instantaneamente. E, caso tenhamos algum problema com o  pyenv  e algo pare de funcionar, é muito mais fácil reinstalar o  pyenv  do que reinstalar o sistema operacional.

O problema de isolamento e gerenciamento de dependências no Python é resolvido por padrão com o  venv,  que é um módulo nativo da linguagem. Com ele, cada projeto pode ter um conjunto exclusivo de dependências, sem que um interfira no outro. E caso ocorra algum problema no ambiente virtual de um projeto, podemos facilmente deletá-lo e criar um novo.

A utilização do  pyenv  como gerenciador de versões Python, combinado com o  venv  para a criação de ambientes virtuais, possibilita um fluxo de desenvolvimento simples, no qual podemos trabalhar paralelamente em diversos projetos Python, intercalando facilmente entre diferentes versões da linguagem, e com um gerenciamento de dependências exclusivo para cada projeto.

Principais pontos

  • Não utilize a versão do Python do sistema operacional, caso ele tenha uma pré-instalada;
  • Não tente atualizar a versão do Python do sistema operacional, você pode acabar quebrando algum componente do sistema;
  • Se você trabalha com múltiplas versões do Python, usar um gerenciador de versões é altamente recomendado;
  •  pyenv  resolve o problema de gerenciar diferentes versões do Python no nosso ambiente;
  • O virtualenv resolve o problema de isolamento de dependências entre diferentes projetos;
  • Um fluxo de trabalho combinando o  pyenv  com o  venv  possibilita intercalar facilmente entre versões do Python, e gerenciar dependências de forma isolada entre projetos.

 

Confira este e outros conteúdos em ilegra

VOCÊ TAMBÉM PODE TER INTERESSE

#TecnologiaPraSomar #MaisEmpregosParaTodos

Como podemos te ajudar?