Configuração avançada do Pip e Virtualenv

Requisitando um ambiente virtual ativo para o “pip”

Agora deve estar claro que usar ambientes virtuais é um ótimo meio para deixar seu ambiente virtual limpo e manter necessidades de diferentes projetos separadas.

Quando você começa a trabalhar em muitos projetos diferentes, pode ser difícil lembrar-se de ativar o ambiente virtual certo quando você volta para um projeto específico. Como resultado disso, é muito fácil instalar pacotes globalmente enquanto acha que está instalando apenas o pacote do ambiente virtual do projeto. Com o tempo isso pode ocasionar uma bagunça na sua lista de pacotes globais.

Para ter certeza que você está instalando pacotes em seu ambiente virtual ao usar “pip install”, adicione a seguinte linha ao seu ~/.bashrc file:

export PIP_REQUIRE_VIRTUALENV=true

Após salvar essas mudanças e sourcing o arquivo ~/.bashrc com source ~/.bashrc, o pip não vai mais deixar você instalar pacotes se você não estiver em um ambiente virtual. Se você tentar usar pip install fora de um ambiente virtual, o pip vai lhe lembrar que um ambiente virtual ativado é necessário para a instalação de pacotes.

$ pip install requests
Could not find an activated virtualenv (required).

Você também pode fazer essa modificação ao editar o seus arquivos pip.conf ou pip.ini. pip.conf é usado pelos sistemas operacionais Unix e MAC OS X e pode ser achado em:

$HOME/.pip/pip.conf

Do mesmo modo, o arquivo pip.ini é utilizado pelos sistemas operacionais Windows e pode ser encontrado em:

%HOME%\pip\pip.ini

Se você não possuir um arquivo pip.conf ou pip.ini nesses locais, você pode criar um novo arquivo com os nomes corretos do seu sistema operacional.

Caso você já tenha um arquivo de configuração, basta adicionar as seguintes linhas abaixo das configurações [globais] para requerir um ambiente virtual ativo.

require-virtualenv = true

Se você não tinha um arquivo de configuração, você terá que criar um novo e adicionar as seguintes linhas ao mesmo:

[global]
require-virtualenv = true

Você obviamente precisará instalar alguns pacotes globalmente (geralmente os que você usa em pacotes diferentes com frequência), e isso pode ser feito ao adicionar a seguinte linha ao seu arquivo ~/.bashrc.

gpip() {
    PIP_REQUIRE_VIRTUALENV="" pip "$@"
}

After saving the changes and sourcing your ~/.bashrc file you can now install packages globally by running gpip install. You can change the name of the function to anything you like, just keep in mind that you will have to use that name when trying to install packages globally with pip.

Caching packages for future use

Every developer has preferred libraries and when you are working on a lot of different projects, you are bound to have some overlap between the libraries that you use. For example, you may be using the requests library in a lot of different projects.

It is surely unnecessary to re-download the same packages/libraries each time you start working on a new project (and in a new virtual environment as a result). Fortunately, you can configure pip in such a way that it tries to reuse already installed packages.

Em sistemas UNIX, você pode adicionar a seguinte linha ao seu arquivo .bashrc ou .bash_profile.

export PIP_DOWNLOAD_CACHE=$HOME/.pip/cache

You can set the path to anywhere you like (as long as you have write access). After adding this line, source your .bashrc (or .bash_profile) file and you will be all set.

Another way of doing the same configuration is via the pip.conf or pip.ini files, depending on your system. If you are on Windows, you can add the following line to your pip.ini file under [global] settings:

download-cache = %HOME%\pip\cache

Similarly, on UNIX systems you should simply add the following line to your pip.conf file under [global] settings:

download-cache = $HOME/.pip/cache

Even though you can use any path you like to store your cache, it is recommended that you create a new folder in the folder where your pip.conf or pip.ini file lives. If you don’t trust yourself with all of this path voodoo, just use the values provided here and you will be fine.