{"id":17705,"date":"2019-01-31T13:06:31","date_gmt":"2019-01-31T15:06:31","guid":{"rendered":"https:\/\/king.host\/wiki\/?post_type=article&#038;p=17705"},"modified":"2025-06-11T11:57:34","modified_gmt":"2025-06-11T14:57:34","slug":"como-utilizar-virtualenv-no-python","status":"publish","type":"article","link":"https:\/\/king.host\/wiki\/artigo\/como-utilizar-virtualenv-no-python\/","title":{"rendered":"Como utilizar Virtualenv no Python"},"content":{"rendered":"\n<p><em>Virtualenv \u00e9 muito \u00fatil e foi desenvolvida pela comunidade Python para fornecer uma maneira para isolar ambientes de desenvolvimento.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_que_e_um_Virtualenv\"><\/span>O que \u00e9 um Virtualenv<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Virtualenvs s\u00e3o uma forma de isolar diversos ambientes de desenvolvimento, assim permitindo ao programador utilizar vers\u00f5es espec\u00edficas de diversos pacotes sem impactar instala\u00e7\u00f5es de outras aplica\u00e7\u00f5es ou sistemas.<\/p>\n\n\n\n<p>Quando criamos ela, ser\u00e1 inicializado uma <em>&#8220;instala\u00e7\u00e3o do python&#8221;&nbsp;<\/em>completa, com o execut\u00e1vel do python, pip e setup-tools.<\/p>\n\n\n\n<p>No ambiente KingHost virtualenvs s\u00e3o suportados e bastante importantes, j\u00e1 que permitem a voc\u00ea ter uma aplica\u00e7\u00e3o utilizando um virtualenv com Django 2.0 e outra aplica\u00e7\u00e3o utilizando um virtualenv com o Django 1.7, por exemplo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/king.host\/?utm_source=wiki&amp;utm_medium=banner-artigo&amp;utm_campaign=banner-artigo-wiki-awareness-como-utilizar-virtualenv-no-python\" target=\"_blank\" rel=\"noreferrer noopener\"><img data-original=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2015\/05\/banner_1.png\" alt=\"banner-kinghost\" class=\"wp-image-25436\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Como_utilizar_no_SSH_KingHost\"><\/span>Como utilizar no SSH KingHost?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Na KingHost para utilizar virtualenvs \u00e9 bem simples, somente precisamos instalar a biblioteca com o <strong>pip<\/strong>, e criar o diret\u00f3rio onde iremos armazenar o conte\u00fado.<\/p>\n\n\n\n<p>No passo a passo abaixo, iremos verificar como criar e utilizar virtualenvs.<\/p>\n\n\n\n<p>O <u>primeiro passo<\/u> \u00e9 instalarmos o virtualenv utilizando o comando <strong>pip.<\/strong><\/p>\n\n\n\n<alerta class=\"wp-block-k-alerta\">Nesse primeiro passo ainda estamos utilizando o python e pip do sistema operacional, ent\u00e3o ser\u00e1 necess\u00e1rio instalar somente no caminho do nosso usu\u00e1rio atual.<\/alerta>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">pip install virtualenv --user<br><\/pre>\n\n\n\n<p>A sa\u00edda da execu\u00e7\u00e3o deve ser como a seguinte, informando ao final <strong>Successfully installed virtualenv.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">Collecting virtualenv\n  Downloading https:\/\/files.pythonhosted.org\/packages\/6a\/d1\/e0d142ce7b8a5c76adbfad01d853bca84c7c0240e35577498e20bc2ade7d\/virtualenv-16.2.0-py2.py3-none-any.whl (1.9MB)\n    100% |????????????????????????????????| 1.9MB 253kB\/s \nRequirement already satisfied (use --upgrade to upgrade): setuptools&gt;=18.0.0 in \/opt\/python-2.7.10\/lib\/python2.7\/site-packages\/setuptools-20.2.2-py2.7.egg (from virtualenv)\nInstalling collected packages: virtualenv\nSuccessfully installed virtualenv<\/pre>\n\n\n\n<p>Agora que o instalamos, podemos gerenciar os nossos ambientes virtuais. Uma boa pr\u00e1tica no uso de ambientes virtuais \u00e9 dedicar um diret\u00f3rio para esse fim, no nosso caso, criaremos o diret\u00f3rio <strong>.virtualenv<\/strong> na $HOME do usu\u00e1rio.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir $HOME\/.virtualenv<\/pre>\n\n\n\n<p>Com o novo diret\u00f3rio criado, vamos criar um virtualenv dentro dele:<br>virtualenv $HOME\/.virtualenv\/meu_virtualenv<br>A sa\u00edda da execu\u00e7\u00e3o do comando deve algo como:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">Installing Setuptools... done. Installing Pip... done.<\/pre>\n\n\n\n<p>Agora estamos prontos para iniciar o uso com o comando:<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">source $HOME\/.virtualenv\/meu_virtualenv\/bin\/activate<\/pre>\n\n\n\n<p>Apartir desse momento, toda a execu\u00e7\u00e3o python que iremos realizar ficar\u00e1 dentro do virtualenv.<br>Ent\u00e3o pacotes instalados ficar\u00e3o dentro do diret\u00f3rio do virtualenv ($HOME\/.virtualenv\/lib).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"33\" data-src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp.png\" alt=\"virtualenv ativado\" class=\"wp-image-17746 lazyload\" data-srcset=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp.png 713w, https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp-300x14.png 300w\" data-sizes=\"(max-width: 713px) 100vw, 713px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 713px; --smush-placeholder-aspect-ratio: 713\/33;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"33\" src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp.png\" alt=\"virtualenv ativado\" class=\"wp-image-17746\" srcset=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp.png 713w, https:\/\/king.host\/wiki\/wp-content\/uploads\/2019\/01\/promtp-300x14.png 300w\" sizes=\"(max-width: 713px) 100vw, 713px\" \/><\/noscript><\/figure><\/div>\n\n\n<p>Podemos verificar o virtualenv em uso pelo nome dele no come\u00e7o do prompt do seu Bash e entre par\u00eanteses.<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_de_instalacao_%E2%80%93_flask\"><\/span>Exemplo de instala\u00e7\u00e3o &#8211; flask<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Com o virtualenv ativado, poderemos instalar os pacotes sem criar conflitos com outras bibliotecas do sistema.<br>Nesse exemplo iremos instalar somente o flask, mas voc\u00ea pode instalar quantas bibliotecas forem necess\u00e1rias para o seu projeto.<\/p>\n\n\n\n<box-info class=\"wp-block-k-box-info\">Como estamos instalando essa depend\u00eancia direto no virtualenv, n\u00e3o \u00e9 necess\u00e1rio utilizar a flag &#8211;user na instala\u00e7\u00e3o do flask.<\/box-info>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">(meu_virtualenv)[gabrielpetry@web01-king ~]$ pip install flask<\/pre>\n\n\n\n<p>E podemos verificar todos os pacotes instalador com o par\u00e2metro <em>freeze.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">(meu_virtualenv)[gabrielpetry@hostname ~]$ pip freeze<br>Click==7.0<br>Flask==1.0.2<br>Jinja2==2.10<br>MarkupSafe==1.1.0<br>Werkzeug==0.14.1<br>itsdangerous==1.1.0<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Como_ativar_o_virtualenv_no_WSGI\"><\/span>Como ativar o virtualenv no WSGI?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>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\u00ea deve explicitamente informar no arquivo nome-da-aplicacao<strong>.wsgi <\/strong>localizado&nbsp;na pasta <strong>apps_wsgi<\/strong> o caminho do ambiente.<\/p>\n\n\n\n<p>Para python3 a estrutura deve ser como a abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">import sys import os&nbsp;\n# no ambiente kinghost o wsgi usa o ambiente de trabalho (cwd) como $HOME\nHOME = os.getcwd()&nbsp;\n# Define o nome da aplica\u00e7\u00e3o, como foi criado no painel de controle   nome_app = \"testflask\" \n# Define o caminho do virtual env\n virtual_env = HOME + \"\/.virtualenv\/\" + nome_app \n# define o caminho da aplica\u00e7\u00e3o\n app_path = HOME + \"\/apps_wsgi\/\" + nome_app \n# Define o caminho do virtual env \nactivate_this = virtual_env + \"\/bin\/activate_this.py\" \n# executa os imports do virtual_env\nwith open(activate_this) as file_: exec(file_.read(), dict(__file__=activate_this)) \n# Adiciona o caminho da aplica\u00e7\u00e3o ao path do ambiente sys.path.append(app_path) \n# importa a applica\u00e7\u00e3o como application, como \u00e9 exigido pelo mod_wsgi\n from run import app as application if __name__ == \"__main__\": application.run()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Como_sair_do_virtualenv\"><\/span>Como sair do virtualenv?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Virtualenvs s\u00e3o muito \u00fateis e auxiliam o desenvolvimento, ent\u00e3o normalmente iremos utilizar diversos ambientes, um para cada uma das aplica\u00e7\u00f5es que est\u00e3o em desenvolvimento.<\/p>\n\n\n\n<p>Para <strong>sair&nbsp;<\/strong>do virtualenv atual, basta digitar o comando <strong>deactivate<\/strong> no terminal, com isso o sistema ir\u00e1 voltar a utilizar o python e pip do sistema, para ativar um novo ambiente o procedimento \u00e9 o mesmo que realizamos no come\u00e7o do artigo, como pode ser verificado abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">(meu_virtualenv)[gabrielpetry@hostname ~]$ deactivate<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">[gabrielpetry@hostname ~]$ source $HOME\/.virtualenv\/django_psycopg2\/bin\/activate<\/pre>\n\n\n\n<p>no exemplo acima, foi desativado o virtualenv meu_virtualenv e ativado o&nbsp; ambiente django_psycopg2.<\/p>\n\n\n\n<p>Como cada aplica\u00e7\u00e3o wsgi tem seu pr\u00f3prio arquivo, n\u00e3o existe conflito na utiliza\u00e7\u00e3o de diversas aplica\u00e7\u00f5es, j\u00e1 que os ambientes est\u00e3o isolados e s\u00e3o instanciados de forma separada no arquivo <strong>.wsgi<\/strong>.<\/p>\n\n\n\n<p><em>       <\/em><\/p>\n","protected":false},"author":9,"featured_media":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","article-category":[215],"article-tag":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/17705"}],"collection":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/comments?post=17705"}],"version-history":[{"count":6,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/17705\/revisions"}],"predecessor-version":[{"id":26650,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/17705\/revisions\/26650"}],"wp:attachment":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/media?parent=17705"}],"wp:term":[{"taxonomy":"article-category","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-category?post=17705"},{"taxonomy":"article-tag","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-tag?post=17705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}