Ambientes virtuais com pyenv + pipenv + debian like
Em Python pode-se gerenciar inumeras versões de projetos com ambientes virtuais distintos e dependências independentes por projeto ou como é bastante conhecido virtualenv.Dependências
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev libssl1.0-dev
Requisitos
Vamos partir do princípio que há um linux do tipo debian like (debian, ubuntu, ou outro derivado de debian), totalmente configurado e com acesso a internet.Escopo
- debian like, Debian GNU/Linux 8.0; equivalente ou posterior
- bash, GNU bash, versão 4.0+
- pyenv
- pipenv
O pacote pipenv serve para gerenciar e fixar (pinar) de forma simples e eficiente os pacotes do projeto e todas as suas dependências, com a finalidade de garantir a replicação do ambiente em sua versão de criação original.
Instalação pyenv
A maneira mais fácil de instalar o pyenv, é através do script de instalação forncecido pelo mantenedor.curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
Configuração
Neste tutorial vamos definir o diretório de projetos em "~/projetos", acrescentar "~/.pyenv" em PATH e ativar pyenv$ cat > ~/.bashrc << fim
export PYENV_ROOT="${HOME}/.pyenv/"
export PROJECT_HOME="${HOME}/projetos" export PYENV_VIRTUALENV_DISABLE_PROMPT=0 export PATH="${PYENV_ROOT}/bin:$PATH" eval "$(pyenv virtualenv-init -)" eval "$(pyenv init -)" fim
Próximo passo é instalar o CPython nas versões desejadas: 3.8.0, 3.7.5 e 2.7.14.
pyenv install 3.8.0 pyenv install 3.7.5 pyenv install 2.7.16
Evite a tentação de poluir sua instalação global do Python, com instalações de modulos extras, pois isto evitará grandes problemas no futuro, principalmente no caso de recuperação em ambientes. Para tornar esta configuração mais amistosa, sem favorecer futura situação de difícil recuperação, criemos instalações "pyenv-virtualenv" de uso global. Exemplo com jupyter/notebook
criar o virtualenv
pyenv virtualenv 3.8.0 jupyter3 pyenv virtualenv 3.8.0 tools3
pyenv virtualenv 3.7.5 jupyter3 pyenv virtualenv 3.7.5 tools3
pyenv virtualenv 2.7.16 ipython2 pyenv virtualenv 2.7.16 tools2
Instalar o módulo necessário para python3
pyenv activate jupyter3 pip install jupyter python -m ipykernel install --user pyenv deactivate
Instalar o módulo necessário para python2
pyenv activate ipython2 pip install ipykernel python -m ipykernel install --user pyenv deactivate
Instalar demais ferramentas globais que suportam Python3
pyenv activate tools3 pip install youtube-dl gnucash-to-beancount rows pyenv deactivate
Instalar ferramentas globais que suportam Python2
pyenv activate tools2 pip install rename s3cmd fabric mercurial pyenv deactivate
Instalar pipenv
pyenv activate pipenv pip install pipenv pyenv deactivate
Ativar todas essas versões do Python e virtualenvs especiais para funcionarem cooperativamente
pyenv global 3.8.0 3.7.5 2.7.16 jupyter3 ipython2 tools3 tools2 pipenv
Criando o diretório do projeto para python 3.8
mkdir ~/projetos/proj1 cd ~/projetos/proj1 pipenv shell --python 3.8 python -V
Criando o diretório do projeto para python 3.7.16
mkdir ~/projetos/proj2 cd ~/projetos/proj2 pipenv shell --python 2.7.16 python -V
Criando o diretório do projeto para python 3.7.5
mkdir ~/projetos/proj3 cd ~/projetos/proj3 pipenv shell --python 3.7.5 python -V
Criar novo ambiente de projeto para versão python inexistente
#versão inexistente ao sistema pyenv install 3.6.8 #diretório do projeto mkdir ~/projetos/proj4 cd ~/projetos/proj4 # Virtualenv para o projeto pipenv shell --python 3.6.8 #confirmação de python python -V pip freeze # Atualização conforme requirements.txt (se houver) pipenv install -r requirements.txt pip freeze # Atualização conforme Pipfile (se houver) pipenv install -d pip freeze
Atualizar ambiente de projeto para versão python inexistente
Certifique-se de que não há um subshell ativo.# acesse do diretório que será atualizado $ cd ~/projetos/proj3 # Backup das dependências do ambiente via requirements.txt # Etapa desnecessária se utilizado Pipfile/Pipfile.lock) $ pipenv lock --requirements > requirements.txt # Atualizar versões disponíveis para instalação através do pyenv $ pyenv update # Instalar versão inexistente ao sistema $ pyenv install 3.8.2 # Remover ambiente pipenv do projeto atual $ pipenv --rm # Ativar ambiente pipenv com a nova versão de Python $ pipenv shell --python 3.8.2 # Atualização de dependências conforme requirements.txt (se houver) $ pipenv install -r requirements.txt # Atualização de dependências conforme Pipfile (se houver)vim Pipfile de: [requires] python_version = "3.7" para: [requires] python_version = "3.8"$ pipenv install -d # Aferir instalação e respectivas versões $ pipenv check $ python -V $ pipenv run pip freeze $ pip freeze
Versões
- 2019/11/19 06:56
Referências
- https://brito.blog.incolume.com.br/2020/03/atualizar-ambiente-linux-pyenv-pipenv.html
- https://medium.com/trainingcenter/utilizando-pyenv-para-manter-multiplas-vers%C3%B5es-de-python-em-seus-projetos-8fce76d35b99
- https://prassanna.io/blog/pyenv-and-pipenv-for-the-perfect-python-environment/
- https://dev.to/writingcode/the-python-virtual-environment-with-pyenv-pipenv-3mlo
- https://klauslaube.com.br/2018/06/11/tchau-requirements-ola-pipfile.html
Comentários