Configurando Ambientes Virtuais com pipenv

Encontro Python Sergipe #5

Wagner Macedo

História do empacotamento de Python

Antes da história

Python surgiu oficialmente em 1991.

Até o ano de 2000, não existia ainda uma solução para o problema do empacotamento de bibliotecas.

Adicionar uma dependência ao seu projeto era uma verdadeira odisséia 💪️

Como era instalada uma biblioteca?

Era preciso copiar os arquivos .py para os locais certos e, se houvesse algum pós-instalação, era preciso seguir as instruções do autor da biblioteca (se houvesse 😱).

Distutils

  • Desenvolvimento iniciou em 1998
  • Introduziu o famoso setup.py
    • Instalar um projeto
    • Gerar um tarball
  • 2000: Adicionado ao Python 1.6
  • Não havia, ainda, um repositório central.

PyPI

  • 2003: PyPI (Python Packaging Index)
  • Adicionou metadados ao setup.py

Era conhecido por Cheeseshop 😆

Setuptools

  • Uma gama de extensões ao Setuptools
    • Declaração de dependências
    • Configurar scripts de instalação
  • 2004: Formato de instalação binária (egg)
  • 2005: Surge o comando easy_install
    • Instalação de pacotes da Internet 😎

O problema de pacotes compartilhados

Os pacotes Python são todos instalados no mesmo local. Isso traz dois grandes problemas:

  1. Diferentes aplicações podem requerer diferentes versões de uma mesma biblioteca.
  2. Saber as dependências mínimas de uma aplicação em desenvolvimento é muito difícil.

Virtualenv

  • 2007: Ambientes virtuais de Python
    • Não compartilha os pacotes do sistema
    • Pacotes visíveis apenas em cada virtualenv
      • Reproduzível

Setuptools e a biblioteca padrão

As melhorias que o Setuptools trouxe para o empacotamento de Python não haviam entrado na biblioteca padrão, onde a Distutils estava estagnando.

Essa situação ajudou a confundir os desenvolvedores de Python, principalmente os recém-chegados.

pip

  • 2008: pip foi introduzido
    • Alternativa ao easy_install
    • Corrige problemas e complexidades

Distribute

  • 2008: Fork de Setuptools
  • Um projeto mais aberto

PyPA

  • 2011: PyPA (Python Packaging Authority)
  • Grupo de trabalho para manter:
    • pip
    • virtualenv

Setuptools: outra vez!

Os projetos Distribute e Setuptools deram as mãos e juntaram os esforços, ficando apenas o nome mais antigo e conhecido.

ensurepip

  • 2014: módulo oficial para instalar pip
    • A partir de Python 3.4, basta chamar
      python -m ensurepip

Pipenv

Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world.

— Kenneth Reitz

Pipenv em poucas palavras

pip + virtualenv = pipenv

Sem o Pipenv 😢

Com o Pipenv 😃

Referências

  1. https://docs.pipenv.org/
  2. https://blog.startifact.com/posts/older/a-history-of-python-packaging.html
  3. https://www.pypa.io/en/latest/history/
  4. http://glyph.twistedmatrix.com/2016/08/python-packaging.html

Dúvidas?

Este slide pode ser encontrado em:
http://prof.wagnermacedo.com/palestra-pipenv/