O pip é o gerenciador de pacotes padrão do Python, essencial para instalar, atualizar e remover bibliotecas de terceiros. Ele permite que você amplie as funcionalidades do Python com milhares de pacotes disponíveis no PyPI (Python Package Index). Nesta aula, vamos dominar os comandos fundamentais do pip, entender como lidar com versões e como usar o pip freeze para gerenciar dependências de projetos.

Dominar o pip é crucial para qualquer desenvolvedor Python, pois facilita a reprodução de ambientes, o compartilhamento de projetos e a manutenção de dependências. Vamos explorar desde a instalação básica até técnicas avançadas de controle de versões.

Instalando e removendo

O pip permite instalar pacotes de forma simples com o comando pip install. Para instalar a versão mais recente de um pacote, use pip install nome-do-pacote. Você também pode especificar uma versão exata, um intervalo de versões ou até mesmo instalar diretamente de um repositório Git ou de um arquivo local.

Para remover um pacote, utilize pip uninstall nome-do-pacote. O pip perguntará confirmação antes de remover, mas você pode usar a flag -y para pular a confirmação. É importante notar que o pip não remove dependências automaticamente, então você pode acabar com pacotes órfãos.

# Instalar um pacote
pip install requests

# Instalar uma versão específica
pip install requests==2.31.0

# Instalar uma versão mínima
pip install "requests>=2.20"

# Remover um pacote
pip uninstall requests

# Remover sem confirmação
pip uninstall -y requests

Além disso, o pip permite instalar pacotes a partir de um arquivo de requisitos (requirements.txt), que lista todas as dependências de um projeto. Isso é especialmente útil para garantir que todos os desenvolvedores usem as mesmas versões.

# Instalar todas as dependências listadas em um arquivo
pip install -r requirements.txt

Versões

O controle de versões é fundamental para evitar conflitos entre pacotes. O pip usa o PEP 440 para especificar versões. Você pode usar operadores como ==, >=, <=, >, <, ~= e !=. O operador ~= é usado para compatibilidade com versões futuras dentro do mesmo release maior.

Para verificar a versão instalada de um pacote, use pip show nome-do-pacote. Para listar todos os pacotes desatualizados, use pip list --outdated. O pip também permite atualizar um pacote com pip install --upgrade.

# Verificar versão instalada
pip show requests

# Listar pacotes desatualizados
pip list --outdated

# Atualizar um pacote para a versão mais recente
pip install --upgrade requests

# Instalar com compatibilidade ~=
pip install "requests~=2.31"  # Equivalente a >=2.31, <2.32

É importante entender que o pip não resolve conflitos de dependências automaticamente. Se dois pacotes exigirem versões incompatíveis de um mesmo pacote, o pip instalará a última versão solicitada, o que pode quebrar o outro pacote. Por isso, é recomendável usar ambientes virtuais para isolar projetos.

pip freeze

O comando pip freeze gera uma lista de todos os pacotes instalados no ambiente atual, com suas versões exatas, no formato nome==versão. Essa lista é comumente salva em um arquivo requirements.txt, que pode ser usado para reproduzir o ambiente em outra máquina.

Para gerar o arquivo, use pip freeze > requirements.txt. Para instalar as dependências a partir desse arquivo, use pip install -r requirements.txt. Essa prática é essencial para garantir a reprodutibilidade de projetos.

# Gerar lista de pacotes com versões
pip freeze

# Salvar em um arquivo
pip freeze > requirements.txt

# Instalar a partir de um arquivo
pip install -r requirements.txt

Uma alternativa mais moderna é usar o pipreqs, que gera um requirements.txt apenas com os pacotes importados no projeto, evitando incluir dependências desnecessárias. No entanto, o pip freeze é o método padrão e mais simples.

PyPI

O PyPI (Python Package Index) é o repositório oficial de pacotes Python, acessível em pypi.org. Ele hospeda milhares de pacotes, desde bibliotecas populares como requests e numpy até projetos menores. O pip busca pacotes no PyPI por padrão.

Você pode pesquisar pacotes diretamente no site ou usar o comando pip search (embora o pip search tenha sido descontinuado em versões recentes do pip, a busca é feita principalmente via navegador). Para obter informações detalhadas sobre um pacote, como descrição, versões e documentação, você pode visitar a página do pacote no PyPI ou usar pip show.

# Mostrar informações do pacote
pip show requests

# Ver versões disponíveis de um pacote (via PyPI)
pip index versions requests

Além disso, você pode configurar o pip para usar um índice privado, se necessário, mas para a maioria dos casos o PyPI é suficiente. Ao publicar seus próprios pacotes, você pode usar o PyPI como repositório, seguindo as instruções em packaging.python.org.

Boas Práticas e Observações Finais

Sempre use ambientes virtuais (venv) para isolar dependências de cada projeto. Isso evita conflitos entre versões de pacotes. Atualize o pip com frequência (python -m pip install --upgrade pip) para ter acesso aos recursos mais recentes. Ao compartilhar projetos, inclua o arquivo requirements.txt e, idealmente, um Pipfile ou pyproject.toml para ferramentas mais modernas. Evite instalar pacotes globalmente, a menos que seja necessário.

Referências

Exercícios

  1. Instale o pacote numpy usando o pip e verifique a versão instalada com pip show. Depois, desinstale-o.

    ✓ Resposta:
    pip install numpy
    pip show numpy
    pip uninstall numpy
  2. Crie um arquivo requirements.txt que contenha as dependências requests (versão 2.31.0) e flask (versão 3.0.0). Instale-as a partir do arquivo.

    ✓ Resposta:
    # requirements.txt
    requests==2.31.0
    flask==3.0.0
    
    # No terminal:
    pip install -r requirements.txt
  3. Explique a diferença entre pip freeze e pip list. Quando você usaria cada um?

    ✓ Resposta:

    pip freeze lista apenas pacotes instalados via pip, com versões exatas, no formato nome==versão, ideal para gerar requirements.txt. pip list lista todos os pacotes instalados, incluindo aqueles gerenciados por outras ferramentas (como o próprio pip) e pode incluir informações adicionais. Use pip freeze para reproduzir ambientes e pip list para inspecionar o ambiente.

  4. Atualize o pacote requests para a versão mais recente, mas depois volte para a versão 2.31.0.

    ✓ Resposta:
    pip install --upgrade requests
    pip install requests==2.31.0
  5. Pesquise no PyPI (via site ou comando) a lista de versões disponíveis do pacote flask e identifique a versão mais recente estável.

    ✓ Resposta:

    Você pode visitar pypi.org/project/Flask para ver as versões. Ou usar o comando pip index versions flask (requer pip >= 21.2) para listar versões. A versão mais recente estável pode variar, mas em 2025 é a 3.0.x.