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
epackages
dosetup()
todos os arquivos fonte C mencionados nos argumentos
ext_modules
oulibraries
dosetup()
scripts especificados pelo argumento
scripts
dosetup()
todos os arquivos especificados pelos argumentos
package_data
edata_files
dosetup()
o arquivo especificado pela opção
license_file
emsetup.cfg
(setuptools 40.8.0+)todos os arquivos especificados pela opção
license_files
emsetup.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 |
---|---|
|
Adicione todos os arquivos que correspondam a qualquer um dos padrões listados (os arquivos devem ser fornecidos como caminhos relativos à raiz do projeto) |
|
Remove todos os arquivos correspondendo a qualquer um dos padrões listados (Arquivos devem ser fornecidos como caminhos relativos à raiz do projeto) |
|
Adiciona todos os arquivos sob diretórios correspondendo a |
|
Remove todos os arquivos sob diretórios correspondendo a |
|
Adiciona todos os arquivos em qualquer lugar na árvore de fontes que correspondam a qualquer um dos padrões listados |
|
Remove todos os arquivos de qualquer lugar na árvore de fontes que correspondam a qualquer um dos padrões listados |
|
Adiciona todos os arquivos sob diretórios correspondendo a |
|
Remove todos os arquivos sob diretórios correspondendo a |
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.