Utilizei por muito tempo o virtualenv para criar ambientes python isolados e assim com tranquilidade, instalar pacotes python a vontade sem ter que me preocupar com versões e compatibilidades entre os pacotes, porque estes estariam sempre isolados no seu ambiente virtual. Isso é legal, muito legal, mas agora além de me preocupar com os pacotes instalados, também tive a necessidade de escolher a versão do python que eu queria usar no meu ambiente virtual. E isso o virtualenv não resolve por completo. Por exemplo:
Quero criar um ambiente virtual com a versão do Python 2.7.6 e um outro com a versão 3.5.1. E ai, como faço? É ai que entra o pyenv + pyenv-virtualenv, pois com o pyenv conseguimos instalar facilmente versões diferentes do python na mesma máquina e alternar entre elas apenas com um simples comando. Já o pyenv-virtualenv é um plugin do pyenv que nos permite criar ambientes isolados escolhendo a versão do Python antes de criá-los.Chique né e como começar?
Primeiro vamos instalar algumas dependências:
1 |
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev git |
Agora vamos instalar o pyenv, com o comando abaixo (Ps: este é o comando que encontrei no site oficial, ver aqui):
1 |
$ sudo curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash |
Após finalizado a instalação, adicione as linhas abaixo ao seu .bashrc:
1 2 3 |
$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc |
E para surtir efeito as linhas adicionadas acima, rode:
1 |
$ source ~/.bashrc |
Com isso o pyenv está instalado e se digitarmos pyenv na console veremos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ pyenv pyenv 20160202-2-gf2f703d Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands local Set or show the local application-specific Python version global Set or show the global Python version shell Set or show the shell-specific Python version install Install a Python version using python-build uninstall Uninstall a specific Python version rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin versions List all Python versions available to pyenv which Display the full path to an executable whence List all Python versions that contain the given executable See `pyenv help <command>' for information on a specific command. For full documentation, see: https://github.com/yyuu/pyenv#readme |
Agora podemos listar as versões do python instaladas, digitando:
1 2 3 |
$ pyenv versions * system (set by /home/mateus/.pyenv/version) |
Para listar as versões python disponíveis:
1 |
$ pyenv install -l |
E assim podemos escolher qual versão do python instalar, vou escolher a 3.5.1
1 |
$ pyenv install 3.5.1 |
agora digite novamente:
1 2 3 4 |
$ pyenv versions * system (set by /home/mateus/.pyenv/version) 3.5.1 |
e você verá que existem duas versões instaladas. E para escolher a versão 3.5.1, basta digitar:
1 |
$ pyenv global 3.5.1 |
agora digite python na console e você verá que a versão global do python no sistema é a 3.5.1:
1 2 3 4 5 6 7 8 |
$ python Python 3.5.1 (default, Feb 7 2016, 18:12:41) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/home/mateus/.pyenv/versions/3.5.1/lib/python35.zip', '/home/mateus/.pyenv/versions/3.5.1/lib/python3.5', '/home/mateus/.pyenv/versions/3.5.1/lib/python3.5/plat-linux', '/home/mateus/.pyenv/versions/3.5.1/lib/python3.5/lib-dynload', '/home/mateus/.pyenv/versions/3.5.1/lib/python3.5/site-packages'] >>> |
Até aqui tudo ok e legal, mas precisamos criar ainda nosso virtual environment, para isso vamos instalar o plugin pyenv-virtualenv:
1 |
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv |
Caso você receba a mensagem:
1 |
fatal: destination path '/home/mateus/.pyenv/plugins/pyenv-virtualenv' already exists and is not an empty directory. |
É porque pyenv-virtualenv foi instalado logo lá no começo junto com a instalação do pyenv.
Enfim vamos criar nosso primeiro virtualenv:
1 |
$ pyenv virtualenv system my_venv_2.7.x |
ative-o digitando:
1 |
$ pyenv activate my_venv_2.7.x |
agora digite python e você verá que a versão usada para criar o virtualenv foi a padrão que veio instalada no sistema antes mesmo de você instalar o pyenv. No meu caso foi a 2.7.6
Para criar com outra versão do python, basta digitar por exemplo:
1 |
$ pyenv vistualenv 3.5.1 my_env_3.5.1 |
Agora podemos criar ambientes virtuais isolados como o virtualenv fazia mas com uma vantagem, ainda podemos escolher qual versão do python usar, legal né.
Quanto ao título deste post [ Utilizando Pyenv e Pyenv-virtualenv e aposentando o virtualenv "ou não". ], ficou escrito desta forma porque estudando o pyenv e o “original” virtualenv (aquele de raiz), descobri que também é posível escolher a versão do python ao se criar um ambiente virtual com o nosso velho amigo “virtualenv”, desta forma:
1 |
$ virtualenv -p $(which python) my_venv_de_raiz |
Aqui criamos um ambiente virtual a moda antiga, mas com a versão atual do python que foi setada pelo comando pyenv global. Bem interessante também.
Ficamos por aqui, abraços e até o próximo post.