Incluindo arquivos em distribuições de código-fonte com MANIFEST.in

Ao construir uma distribuição fonte para o seu pacote, por padrão apenas um conjunto mínimo de arquivos é incluído. Você pode querer incluir arquivos extras na distribuição, como um arquivo de autores/contribuidores, um diretório docs/ ou um diretório de arquivos de dados usado para fins de teste. Pode até haver arquivos extras que você precisa incluir; por exemplo, se o seu setup.py calcula a long_description do seu projeto lendo um arquivo README e um changelog, você precisará incluir ambos os arquivos no sdist para que as pessoas que construam ou instalar a partir do sdist obtém os resultados corretos.

Adicionar e remover arquivos para e da distribuição fonte é feito escrevendo um arquivo MANIFEST.in na raiz do projeto.

Como os arquivos são incluídos em um sdist

Os seguintes arquivos são incluídos em uma distribuição fonte por padrão:

  • todos os arquivos fonte Python implícitos pelos argumentos py_modules e packages do setup()

  • todos os arquivos fonte C mencionados nos argumentos ext_modules ou libraries do setup()

  • scripts especificados pelo argumento scripts do setup()

  • todos os arquivos especificados pelos argumentos package_data e data_files do setup()

  • o arquivo especificado pela opção license_file em setup.cfg (setuptools 40.8.0+)

  • todos os arquivos especificados pela opção license_files em setup.cfg (setuptools 42.0.0+)

  • todos os arquivos correspondendo ao padrão test/test*.py

  • setup.py (ou o que quer que você tenha chamado de seu script de configuração)

  • setup.cfg

  • README

  • README.txt

  • README.rst (Python 3.7+ ou setuptools 0.6.27+)

  • README.md (setuptools 36.4.0+)

  • pyproject.toml (setuptools 43.0.0+)

  • MANIFEST.in

Depois de adicionar os arquivos acima ao sdist, os comandos em MANIFEST.in (se tal arquivo existir) são executados para adicionar e remover outros arquivos para e do sdist. Os arquivos padrão podem até mesmo ser removidos do sdist com o comando apropriado de MANIFEST.in.

Após processar o arquivo MANIFEST.in, setuptools remove o diretório build/ bem como quaisquer diretórios chamados RCS, CVS ou .svn do sdist, e adiciona um arquivo PKG-INFO e um diretório *.egg-info. Este comportamento não pode ser alterado com MANIFEST.in.

Comandos do MANIFEST.in

Um arquivo MANIFEST.in consiste em comandos, um por linha, instruindo o setuptools a adicionar ou remover algum conjunto de arquivos do sdist. Os comandos são:

Comando

Descrição

include padrão1 padrão2 ...

Adicione todos os arquivos que correspondam a qualquer um dos padrões listados (os arquivos devem ser fornecidos como caminhos relativos à raiz do projeto)

exclude padrão1 padrão2 ...

Remove todos os arquivos correspondendo a qualquer um dos padrões listados (Arquivos devem ser fornecidos como caminhos relativos à raiz do projeto)

recursive-include padrão-dir padrão1 padrão2 ...

Adiciona todos os arquivos sob diretórios correspondendo a padrão-dir que correspondem a qualquer um dos padrões listados

recursive-exclude padrão-dir padrão1 padrão2 ...

Remove todos os arquivos sob diretórios correspondendo a padrão-dir que correspondem a qualquer um dos padrões listados

global-include padrão1 padrão2 ...

Adiciona todos os arquivos em qualquer lugar na árvore de fontes que correspondam a qualquer um dos padrões listados

global-exclude padrão1 padrão2 ...

Remove todos os arquivos de qualquer lugar na árvore de fontes que correspondam a qualquer um dos padrões listados

graft padrão-dir

Adiciona todos os arquivos sob diretórios correspondendo a padrão-dir

prune padrão-dir

Remove todos os arquivos sob diretórios correspondendo a padrão-dir

Os padrões aqui são padrões do estilo glob: * corresponde a zero ou mais caracteres de nome de arquivo regulares (no Unix, tudo exceto barra; no Windows, tudo exceto barra invertida e dois pontos); ? corresponde a um único caractere de nome de arquivo regular, e [chars] corresponde a qualquer um dos caracteres entre os colchetes (que podem conter intervalos de caracteres, por exemplo, [az] ou [ a-fA-F0-9]). Setuptools também oferece suporte não documentado a ** correspondendo a zero ou mais caracteres, incluindo barra, barra invertida e dois pontos.

Os padrões de diretório são relativos à raiz do diretório do projeto; por exemplo, graft exemplo* incluirá um diretório chamado exemplos na raiz do projeto, mas não incluirá docs/exemplos/.

Nomes de arquivos e diretórios em MANIFEST.in devem ser separados por /; setuptools irá converter automaticamente as barras para o separador de diretório apropriado da plataforma local.

Os comandos são processados na ordem em que aparecem no arquivo MANIFEST.in. Por exemplo, dados os comandos:

graft tests
global-exclude *.py[cod]

o conteúdo da árvore de diretórios tests será primeiro adicionado ao sdist, e depois disso todos os arquivos no sdist com uma extensão .pyc, .pyo ou .pyd será removidos do sdist. Se os comandos estivessem na ordem oposta, então os arquivos *.pyc etc. seriam removidos apenas do que já estava no sdist antes de adicionar tests, e se tests contivesse quaisquer arquivos *.pyc, eles acabariam incluídos no sdist porque a exclusão aconteceu antes de serem incluídos.