Virtualenv é muito útil e foi desenvolvida pela comunidade Python para fornecer uma maneira para isolar ambientes de desenvolvimento.
O que é um Virtualenv
Virtualenvs são uma forma de isolar diversos ambientes de desenvolvimento, assim permitindo ao programador utilizar versões específicas de diversos pacotes sem impactar instalações de outras aplicações ou sistemas.
Quando criamos ela, será inicializado uma “instalação do python” completa, com o executável do python, pip e setup-tools.
No ambiente KingHost virtualenvs são suportados e bastante importantes, já que permitem a você ter uma aplicação utilizando um virtualenv com Django 2.0 e outra aplicação utilizando um virtualenv com o Django 1.7, por exemplo.
Como utilizar no SSH KingHost?
Na KingHost para utilizar virtualenvs é bem simples, somente precisamos instalar a biblioteca com o pip, e criar o diretório onde iremos armazenar o conteúdo.
No passo a passo abaixo, iremos verificar como criar e utilizar virtualenvs.
O primeiro passo é instalarmos o virtualenv utilizando o comando pip.
pip install virtualenv --user
A saída da execução deve ser como a seguinte, informando ao final Successfully installed virtualenv.
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/6a/d1/e0d142ce7b8a5c76adbfad01d853bca84c7c0240e35577498e20bc2ade7d/virtualenv-16.2.0-py2.py3-none-any.whl (1.9MB)
100% |????????????????????????????????| 1.9MB 253kB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools>=18.0.0 in /opt/python-2.7.10/lib/python2.7/site-packages/setuptools-20.2.2-py2.7.egg (from virtualenv)
Installing collected packages: virtualenv
Successfully installed virtualenv
Agora que o instalamos, podemos gerenciar os nossos ambientes virtuais. Uma boa prática no uso de ambientes virtuais é dedicar um diretório para esse fim, no nosso caso, criaremos o diretório .virtualenv na $HOME do usuário.
mkdir $HOME/.virtualenv
Com o novo diretório criado, vamos criar um virtualenv dentro dele:
virtualenv $HOME/.virtualenv/meu_virtualenv
A saída da execução do comando deve algo como:
Installing Setuptools... done. Installing Pip... done.
Agora estamos prontos para iniciar o uso com o comando:
source $HOME/.virtualenv/meu_virtualenv/bin/activate
Apartir desse momento, toda a execução python que iremos realizar ficará dentro do virtualenv.
Então pacotes instalados ficarão dentro do diretório do virtualenv ($HOME/.virtualenv/lib).
Podemos verificar o virtualenv em uso pelo nome dele no começo do prompt do seu Bash e entre parênteses.
Exemplo de instalação – flask
Com o virtualenv ativado, poderemos instalar os pacotes sem criar conflitos com outras bibliotecas do sistema.
Nesse exemplo iremos instalar somente o flask, mas você pode instalar quantas bibliotecas forem necessárias para o seu projeto.
(meu_virtualenv)[gabrielpetry@web01-king ~]$ pip install flask
E podemos verificar todos os pacotes instalador com o parâmetro freeze.
(meu_virtualenv)[gabrielpetry@hostname ~]$ pip freeze
Click==7.0
Flask==1.0.2
Jinja2==2.10
MarkupSafe==1.1.0
Werkzeug==0.14.1
itsdangerous==1.1.0
Como ativar o virtualenv no WSGI?
Na estrutura KingHost utilizamos o mod_wsgi do apache para prover a estrutura de hospedagem do python. Sendo assim, quando for preciso utilizar o virtualenv, você deve explicitamente informar no arquivo nome-da-aplicacao.wsgi localizado na pasta apps_wsgi o caminho do ambiente.
Para python3 a estrutura deve ser como a abaixo:
import sys import os
# no ambiente kinghost o wsgi usa o ambiente de trabalho (cwd) como $HOME
HOME = os.getcwd()
# Define o nome da aplicação, como foi criado no painel de controle nome_app = "testflask"
# Define o caminho do virtual env
virtual_env = HOME + "/.virtualenv/" + nome_app
# define o caminho da aplicação
app_path = HOME + "/apps_wsgi/" + nome_app
# Define o caminho do virtual env
activate_this = virtual_env + "/bin/activate_this.py"
# executa os imports do virtual_env
with open(activate_this) as file_: exec(file_.read(), dict(__file__=activate_this))
# Adiciona o caminho da aplicação ao path do ambiente sys.path.append(app_path)
# importa a applicação como application, como é exigido pelo mod_wsgi
from run import app as application if __name__ == "__main__": application.run()
Como sair do virtualenv?
Virtualenvs são muito úteis e auxiliam o desenvolvimento, então normalmente iremos utilizar diversos ambientes, um para cada uma das aplicações que estão em desenvolvimento.
Para sair do virtualenv atual, basta digitar o comando deactivate no terminal, com isso o sistema irá voltar a utilizar o python e pip do sistema, para ativar um novo ambiente o procedimento é o mesmo que realizamos no começo do artigo, como pode ser verificado abaixo:
(meu_virtualenv)[gabrielpetry@hostname ~]$ deactivate
[gabrielpetry@hostname ~]$ source $HOME/.virtualenv/django_psycopg2/bin/activate
no exemplo acima, foi desativado o virtualenv meu_virtualenv e ativado o ambiente django_psycopg2.
Como cada aplicação wsgi tem seu próprio arquivo, não existe conflito na utilização de diversas aplicações, já que os ambientes estão isolados e são instanciados de forma separada no arquivo .wsgi.
Restando dúvidas ou precisando de ajuda, contate-nos via telefone ou chat e converse com nosso suporte. Mas tenha em mãos seu código de cliente e senha de atendimento para ser atendido com mais agilidade.