Esse tutorial será válido para Windows , visto que vi poucos explicando-o comparado à linux.
Bom pessoal hoje vou falar de um assunto que quando o pessoal está iniciando em algum projeto em Python tem certa dificuldade, então vou tentar sanar algumas neste post.
O INÍCIO ( ORIGEM DO PROBLEMA )
Bom, pelo menos eu, quando iniciei no desenvolvimento com Python sempre ouvia o pessoal falar em ambientes virtuais... que tinha que isolar as libs de projeto, essas coisas, mas não entendia muito bem pois eu só trabalhava com pequenos projetos e sempre com as mesmas libs, ainda mais que eu estava começando a aprender Python e suas bibliotecas, então eu instalava tudo no sistema operacional e começava a codificar ( que era o que eu queria ) :D
Então no inicio o pessoal ( até onde eu vi ), instalava as libs dos seus projetos direto no sistema operacional que estava usando, e se surgisse outro projeto com outras libs era fácil, só instalar ao lado das que já haviam (sem problemas), negócio era quando o projeto precisava de libs em outras versões das que já existiam, aí que o negócio começava a complicar, tinha que desistalar as que já estavam e instalar do outro projeto... depois voltar as outras libs quando voltasse para o projeto antigo... em resumo, virava uma bagunça, e para administrar isso era complicado.
COMO SOLUCIONARAM
Para resolver esse problema o pessoal criou um conceito chamado ambiente virtual
, que nada mais é que uma pasta com arquivos que simulam uma instalação real do Python, e com isso recria todo um ambiente para que libs possam ser instaladas, e assim possa "apontar" a instalação atual para determinada pasta naquele momento desejada para se trabalhar ( ambiente virtual de uma instalação Python ) , e com esse ambiente ativado ele enxergará determiadas libs instaladas, e se ativar outro ambiente que aponta para outro path de uma outra instalação Python com libs totalmente diferentes.
Desse modo você pode criar vários ambientes com sua própria instalação do Python e instalar qualquer lib nesse ambiente que ele não fica exposto para o seu sistema, e assim deixará cada projeto isolado e tranquilo de se trabalhar.
COMO INSTALAR
A coisa mais básica que se precisa para iniciar é o pip
instalado . Por padrão ele vem nas instalações do Python 2 >= 2.7.9 e Python 3 >= 3.4 , mas se você não está usando nenhuma dessas... Dificilmente :D ..
O
pip
é uma lib que merece atenção, pois ela é o gerenciador padrão de dependências de projetos Python, com ela é possível instalar via linha de comando todas as libs que seu projeto precisa, tudo isso graças ao repositório de libs python: PyPI, onde você encontrará diversas facilidades para seu projeto, desde tratamento de datas, frameworks web, machine learning, gráficos, tratamento de requisições web...
Mas se não houver o pip instalado na máquina então acesse esse link, salve em algum local e execute por meio do python para instalá-lo.
python3 get-pip.py
Se o pip já estava na sua máquina execute o comando:
python3 -m pip install virtualenv
E começará a instalação:
> python3 -m pip install virtualenv
Downloading/unpacking virtualenv
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...
O comando python3 -m indica será executado uma lib python por meio do terminal.
Se ele tiver sido instalado via get-pip.py basta usar o pip
na linha de comando, sem referenciar o Python.
COMO USAR
Depois de instalado, a lib estará disponível no console para criar ambientes da seguinte forma:
virtualenv python_project
Se tudo ocorrer bem aparecerá as seguintes mensagens:
D:\Ambientes\> virtualenv python-project
Using base prefix 'C:\\Python34'
New python executable in D:\Ambientes\python-project\Scripts\python3.exe
Also creating executable in D:\Ambientes\python-project\Scripts\python.exe
Installing setuptools, pip, wheel...done.
Pronto, com isso você tem um ambiente para se trabalhar. Mas para iniciar de fato é preciso ativá-lo, e para isso basta entrar na pasta Scripts
dentro da pasta do ambiente criado e executar pelo cmd o arquivo activate.bat ( pode escrever sem a extenção .bat ).
cd D:\Ambientes\python-project\Scripts
D:\Ambientes\python-project\Scripts> activate
Com isso o seu console mudará e passará a ter o nome do ambiente no início do conteúdo do endereço atual , no meu caso :
(python-project) D:\Ambientes>
E para desativar basta usar o comando deactivate
de qualquer ponto do seus sistema através do cmd.
D:\deactivate
Com isso você não estará com nenhum ambiente ativado.
Dessa forma você já pode instalar suas libs independentes para trabalhar tranquilamente sem conflitos com outros projetos.
Note que eu não precisei criar o ambiente virtual dentro do projeto que eu iria trabalhar, e nem precisa, como nós estamos trabalhando com ambientes virtuais ele funciona como um ambiente comum como se fosse a instalação normal do Python depois de instalado. Com isso nossos comandos Python no cmd enxergarão o Python atualmente ativo, seja do sistema operacional , seja do ambiente virtual. Dessa forma eu posso ter uma pasta chamada "Ambientes" para conter cada ambiente de libs que trabalharei em cada projeto, e quando for trabalhar no projeto respectivo daquele ambiente eu só ativo ele e vou trabalhar no projeto normalmente.
Com isso:
O ambiente só é associado ao projeto através da ativação do mesmo , não necessariamente precisa está dentro do projeto.
BOAS PRÁTICAS
E para ficar ainda melhor trabalhar com ambientes virtuais há uma prática que é usar um arquivo chamado requirements.txt com as libs necessárias, sua estrutura é parecida com:
faker
requests
Cada lib usada no projeto separada por linha, e para executá-lo basta estar com o ambiente ativado ( através do comando activate
) e executá-lo:
pip install -r requirements.txt
Assim o pip usará o comando pip install lib
recursivamente para cada lib contida no arquivo. Dessa forma em projetos em equipes basta gerar um requirements para o projeto em uso e com isso o outro programador executá-lo para ficar com o ambiente totalmente igual ( com relação à bibliotecas ) ao da equipe. E ainda vejo usarem arquivos como dev_requirements.txt, onde nesse arquivo haverá por exemplo libs respectivas à testes unitários e de cobertura de código para ser verificado antes de fazer o deploy, não sendo necessário instalar essas libs no ambiente de produção.
Mas e para gerar esse arquivo com as libs que estou usando no meu ambiente virtual?
Simples, o pip possui um comando chamado freeze
onde ele pega as libs da instalação atual do python ( lembra que um ambiente virtual está ativado ? ). mais suas dependências e gera um arquivo com suas versões naquele momento. Vamos gerar um arquivo requirements para as libs listadas no exemplo acima.
> pip freeze > requirements.txt
certifi==2017.4.17
chardet==3.0.3
Faker==0.7.15
idna==2.5
python-dateutil==2.6.0
requests==2.17.3
six==1.10.0
urllib3==1.21.1
Assim o pip freeze
joga a saída do comando ( que é a lista das libs instaladas no ambiente atual ) para o arquivo.
Pronto, as libs que você usa no seu ambiente estão em um arquivo que pode ser compartilhado, atualizado e mudado entre a equipe.
Lembrando que o requirements.txt por convenção deve ficar na raiz do projeto
BÔNUS
-
Há maneiras de escolhar uma versão diferente do python para cada ambiente por meio do parâmetro --python="Diretório da versão do python" junto ao comando
virtualenv
, assim algumas libs que só suportam o python2.7 poderão ser executadas. -
A partir python3.4 há vem incluído uma lib chamada
venv
responsável por criar ambientes virtuais sem necessidade de componentes externos. Basta:
python3 -m venv nome_do_ambiente
Usando o próprio python para criar o ambiente o fluxo é o mesmo explicado no post.
Bom pessoal era isso que tinha pra explicar sobre como trabalhar com ambientes virtuais para deixar seus projetos mais organizados. Até o próximo post.