Python/Ambiente Virtual

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar

Contexto

Por motivos históricos os mecanismos de instalação de pacotes em Python são complicados, em parte devido à existência de várias alternativas usando componente mais ou menos concorrentes, complementares e mais ou menos (in)compatíveis.

Essa confusão se reflete também na questão dos ambientes virtuais para você isolar versões diferentes de Python com versões também diferentes de pacotes de bibliotecas, porque tudo isso depende e influi no mecanismo de instalação de pacotes.

A boa notícia é que a partir do Python 3.4 (beta em nov/2014), as coisas melhoraram muito, porque o instalador de pacotes pip finalmente fará parte da distribuição padrão de Python.

Se quiserem saber os detalhes sórdidos da situação atual, podem ler o PEP 453, onde os problemas tradicionais são apresentados em detalhes, juntamente com a solução adotada para o Python 3.4 (ver referências ao final).

pip

pip é o instalador de pacotes multi-plataforma do Python. Com ele, instalar um pacote é tão fácil quanto escrever pip install django. Ele pode ser usado para instalar pacotes no Python do sistema ou em um ambiente virtual (ver a seguir).

O pip faz parte do Python 3.4, mas precisa ser instalado à parte nas versões anteriores. Ele depende de outro pacote chamado setuptools.

virtualenv ou venv

virtualenv é um script para criar ambientes virtuais Python, que são instalações de Python isoladas do Python do sistema. Com ele você pode ter várias instalações de várias versões de Python diferentes, cada uma com um conjunto específico de bibliotecas instaladas. Isso facilita muito o desenvolvimento e principalmente, a instalação do que você desenvolveu em um ambiente de produção (a.k.a. deployment), porque permite que você determine facilmente e com precisão quais pacotes são pré-requisitos para o seu projeto.

venv é uma derivação do virtualenv que foi incorporada ao Python 3.3. No futuro o virtualenv deve desaparecer porque todo mundo poderá usar o venv.

Relação entre pip e virtuaenv/venv

Quando você instala o virtualenv, o pip é instalado automaticamente dentro de cada ambiente virtual ativado. Por outro lado, se você instala primeiro o pip no sistema, pode usá-lo para instalar o virtualenv.

Para quem não tem nem um nem outro instalado, a recomendação é instalar o pip no sistema, e usar este pip para instalar o virtualenv no sistema. A partir daí você pode criar ambientes virtuais sem precisar ser administrador da máquina.

Python 3.4

Não precisa ser superusuário, melhor fazer tudo isso com seu usuário normal. Esse procedimento funciona nos *nix, no Windows vai ser diferente mas não tenho como testar neste momento:

1) criar ambiente

 $ python3 -m venv meu_venv

2) ativar ambiente (note que depois de ativado o ambiente, o prompt passa a incluir o nome do ambiente entre parêntesis):

 $ source meu_venv/bin/activate
 (meu_venv)  $

3) use o pip para instalar pacotes no ambiente criado

Python 3.3

Criar ambiente virtual com venv e pip

Não precisa ser superusuário, melhor fazer tudo isso com seu usuário normal. Esse procedimento funciona nos *nix, no Windows vai ser diferente mas não tenho como testar neste momento:

1) criar ambiente

 $ python3 -m venv meu_venv

2) ativar ambiente (note que depois de ativado o ambiente, o prompt passa a incluir o nome do ambiente entre parêntesis):

 $ source meu_venv/bin/activate
 (meu_venv)  $

3) baixar e instalar o setuptools usando o Python do ambiente ativado:

 (meu_venv)  $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
 (meu_venv)  $ python ez_setup.py

4) baixar e instalar o pip usando o Python do ambiente ativado:

 (meu_venv)  $ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
 (meu_venv)  $ python get-pip.py

5) verificar que o pip foi instalado corretamente no ambiente (a segunda linha é o resultado do comando pip --version):

 (meu_venv) luciano@lemingo ~/prj/venv-tests $ pip --version
 pip 1.4.1 from /var/prj/venv-tests/meu_venv/lib/python3.3/site-packages (python 3.3)

Python 2.6, 2.7, 3.1, 3.2

Instalar pip no sistema

O instalador de pacotes pip depende de uma biblioteca chamada setuptools.

Em um sistema *nix, os passos abaixo devem ser suficientes para instalar o pip. No Windows, em geral não se

1) Instalar a biblioteca setuptools no sistema (necessário privilégios de administrador)

1.1) Baixar o script ez_setup.py, que instala setuptools:

 $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

1.2) Executar o ex_setup, como super usuário e usando o Python X desejado (X="2" ou X="3"; default X="" equivale a "2" na maioria dos sistemas):

 $ sudo pythonX ez_setup.py

2) Instalar o utilitário pip.

2.1) Baixar o script get-pip.py:

 $  wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py

2.2) Executar o get-pip.py, como super usuário e usando o Python X desejado:

 $ sudo pythonX get-pip.py

2.3) Verificar a versão do pip que foi instalada (no meu caso, usei o Python 3 no Linux Mint 15 e o resultado foi esse):

 $ pip --version
 pip 1.4.1 from /usr/local/lib/python3.3/dist-packages (python 3.3)


Instalar virtualenv no sistema

1) Instalar o pip no sistema (passos 1.1 a 2.2 acima).


ATENÇÃO
Note que só pode haver um pip no sistema, se você instalar o pip com Python 2 e depois com Python 3, a segunda instalação vai sobrescrever a primeira. Na prática, o mais comum hoje é instalar apenas o pip para o Python 2, que nos sistemas *nix já vem instalado, e para Python 3 instalar apenas o pip dentro do venv.

2) Verificar a versão do pip que foi instalada (no meu caso, quando usei o Python 2 no Linux Mint 15 e o resultado foi esse):

 $ pip --version
 pip 1.4.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

3) Instalar o virtualenv no sistema, usando o pip do sistema (necessário privilégios de administrador). No comando abaixo, a opção --upgrade serve para atualizar uma eventual instalação anterior do virtualenv. Se você nunca instalou o virtualenv, não precisa desta opção, mas (creio que) ela não atrapalha se você não tem um virtualenv instalado.

 $ sudo pip install --upgrade virtualenv

Criar e ativar um ambiente virtual

Uma vez instalado o script virtualenv-X.Y, use-o para criar um ambiente virtual em qualquer diretório:

 $ virtualenv-X.Y meu_env

Ative o ambiente criado:

 $ source meu_env/bin/activate

A partir de agora, você deve ter um ambiente virtual ativo, e isso é sinalizado no próprio prompt do shell:

 (meu_env) $ 

Para verificar se o pip que você vai executar é o pip do ambiente, use:

 (meu_env) $ pip --version

A mensagem resultante deve indicar o pip instalado dentro do ambiente virtual, e não o pip do sistema.

Referências

PEP 453 -- Explicit bootstrapping of pip in Python installations
http://www.python.org/dev/peps/pep-0453/
Instruções originais para instalação do PIP
http://www.pip-installer.org/en/latest/installing.html