Como isolar seus projetos Python com virtualenv (ambiente virtual)
Neste artigo lhes apresento o virtualenv, uma ferramenta que nos traz a habilidade de isolar o interpretador e as bibliotecas de nossos projetos Python, reduzindo o risco de problemas de versionamento e quebra de dependências caso o sistema operacional seja atualizado.
Introdução
Python hoje em dia está presente em 100% das distribuições GNU/Linux, muitas das ferramentas essenciais do sistema operacional foram criadas nestas linguagem. Porém, assim como na maioria das linguagens, Python também sofre com problemas de compatibilidade entre versões da linguagem e de suas bibliotecas.
Desde dezembro de 2008 existem basicamente dois tipos de Python, o 2.x e o 3.x. Muito código escrito em Python 2.x é incompatível com a versão 3.x e vice-versa.
O Python 3.x obviamente traz muitas vantagens sobre o 2.x e atualmente, para quem está iniciando um projeto, recomenda-se optar pela última versão da linguagem.
Sua distribuição Linux provavelmente possui as 2 versões do interpretador do comando e geralmente a versão padrão é a 2.x. Você pode conferir isso digitando:
python --version
Python 2.7.13
python3 --version
Python 3.5.3
Para início de conversa, se você está começando um projeto Python, irá precisar digitar "python3" ao invés de apenas "python" toda vez que for executar seus scripts.
Agora vamos supor que você irá usar algumas bibliotecas em seu projeto e seu código está diretamente atrelado às suas versões. Determinado dia você acorda, dá um dist-upgrade e bah, descobre que o sistema operacional atualizou as bibliotecas e seu código se tornou incompatível com as novas versões. Ok, isso é raro de acontecer, mas é possível.
Beleza então, já entendemos os problemas (assim espero), vamos à solução! E ela atende pelo nome virtualenv.
Python 2.x:
sudo apt install python-pip
Python 3.x:
sudo apt install python3-pip
Usuários de outras distribuições podem pesquisar em seu gerenciador de pacotes por "python pip", dou garantias de que existe o pacote no repositório oficial de sua distro.
Python 2.x:
pip install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl (1.9MB)
100% |████████████████████████████████| 1.9MB 494kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0
Python 3.x:
pip3 install virtualenv
Collecting virtualenv
Using cached https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0
E agora vamos testar a instalação, o comando abaixo deverá retornar a página de help do virtualenv:
python -m virtualenv
ou
python3 -m virtualenv
Desde dezembro de 2008 existem basicamente dois tipos de Python, o 2.x e o 3.x. Muito código escrito em Python 2.x é incompatível com a versão 3.x e vice-versa.
O Python 3.x obviamente traz muitas vantagens sobre o 2.x e atualmente, para quem está iniciando um projeto, recomenda-se optar pela última versão da linguagem.
Sua distribuição Linux provavelmente possui as 2 versões do interpretador do comando e geralmente a versão padrão é a 2.x. Você pode conferir isso digitando:
python --version
Python 2.7.13
python3 --version
Python 3.5.3
Para início de conversa, se você está começando um projeto Python, irá precisar digitar "python3" ao invés de apenas "python" toda vez que for executar seus scripts.
Agora vamos supor que você irá usar algumas bibliotecas em seu projeto e seu código está diretamente atrelado às suas versões. Determinado dia você acorda, dá um dist-upgrade e bah, descobre que o sistema operacional atualizou as bibliotecas e seu código se tornou incompatível com as novas versões. Ok, isso é raro de acontecer, mas é possível.
Beleza então, já entendemos os problemas (assim espero), vamos à solução! E ela atende pelo nome virtualenv.
Instalando o Python Package Installer
Para instalar a biblioteca virtualenv precisaremos do pip (Python Package Installer). Em distribuições Debian ou derivadas, você pode instalar com:Python 2.x:
sudo apt install python-pip
Python 3.x:
sudo apt install python3-pip
Usuários de outras distribuições podem pesquisar em seu gerenciador de pacotes por "python pip", dou garantias de que existe o pacote no repositório oficial de sua distro.
Instalando o módulo virtualenv
O virtualenv é uma biblioteca/módulo Python. Em Debian e derivados é possível instalá-lo via APT, mas aqui demonstrarei como instalá-lo via pip.Python 2.x:
pip install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl (1.9MB)
100% |████████████████████████████████| 1.9MB 494kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0
Python 3.x:
pip3 install virtualenv
Collecting virtualenv
Using cached https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0
E agora vamos testar a instalação, o comando abaixo deverá retornar a página de help do virtualenv:
python -m virtualenv
ou
python3 -m virtualenv
You must provide a DEST_DIR
Usage: virtualenv.py [OPTIONS] DEST_DIR
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose Increase verbosity.
-q, --quiet Decrease verbosity.
-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python3.5 will use the python3.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with
(/usr/bin/python3)
--clear Clear out the non-root install and start from scratch.
--no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior.
--system-site-packages
Give the virtual environment access to the global
site-packages.
--always-copy Always copy files rather than symlinking.
--relocatable Make an EXISTING virtualenv environment relocatable.
This fixes up scripts and makes all .pth files
relative.
--no-setuptools Do not install setuptools in the new virtualenv.
--no-pip Do not install pip in the new virtualenv.
--no-wheel Do not install wheel in the new virtualenv.
--extra-search-dir=DIR
Directory to look for setuptools/pip distributions in.
This option can be used multiple times.
--download Download preinstalled packages from PyPI.
--no-download, --never-download
Do not download preinstalled packages from PyPI.
--prompt=PROMPT Provides an alternative prompt prefix for this
environment.
--setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--distribute DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--unzip-setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.