Como você adiciona arquivos adicionais a uma roda?

Como controlar quais arquivos estão incluídos em uma roda? PareceMANIFEST.in não é usado porpython setup.py bdist_wheel.

ATUALIZAR:

Eu estava errado sobre a diferença entre instalar a partir de uma fonte tarball vs uma roda. A distribuição de origem inclui arquivos especificados emMANIFEST.in, mas o pacote instalado possui apenas arquivos python. São necessárias etapas para identificar arquivos adicionais que devem ser instalados, seja a instalação via distribuição de origem, egg ou wheel. Nomeadamente,package_data é necessário para arquivos de pacotes adicionais earquivos de dados para arquivos fora do seu pacote, como scripts de linha de comando ou arquivos de configuração do sistema.

Pergunta original

eu tenhoum projeto onde eu tenho usadopython setup.py sdist para construir meu pacote,MANIFEST.in controlar os arquivos incluídos e excluídos epyroma emanifesto de cheque para confirmar minhas configurações.

Recentemente, eu o convertei em código Python 2/3 duplo e adicionei um setup.cfg com

[bdist_wheel]
universal = 1

Eu posso construir uma roda compython setup.py bdist_wheel, e parece ser uma roda universal, conforme desejado. No entanto, ele não inclui todos os arquivos especificados emMANIFEST.in.

O que é instalado?

Eu cavei mais fundo, e agora sei mais sobre embalagens e rodas. Aqui está o que eu aprendi:

Carrego dois arquivos de pacote no diretórioprojeto multigtfs no PyPi:

multigtfs-0.4.2.tar.gz - a bola de alcatrão de origem, que inclui todos os arquivosMANIFEST.in.multigtfs-0.4.2-py2.py3-none-any.whl - A distribuição binária em questão.

Criei dois novos ambientes virtuais, ambos com Python 2.7.5, e instalei cada pacote (pip install multigtfs-0.4.2.tar.gz) Os dois ambientes são quase idênticos. Eles têm diferentes.pyc arquivos, que são os arquivos Python "compilados". Existem arquivos de log que registram os diferentes caminhos no disco. A instalação a partir do tar ball de origem inclui uma pastamultigtfs-0.4.2-py27.egg-info, detalhando a instalação e a instalação da roda possui ummultigtfs-0.4.2.dist-info pasta, com os detalhes desse processo. No entanto, do ponto de vista do código usando o projeto multigtfs, não há diferença entre os dois métodos de instalação.

Explicitamente, nem os arquivos .zip usados pelo meu teste, portanto, o conjunto de testes falhará:

$ django-admin startproject demo
$ cd demo
$ pip install psycopg2  # DB driver for PostGIS project
$ createdb demo         # Create PostgreSQL database
$ psql -d demo -c "CREATE EXTENSION postgis" # Make it a PostGIS database 
$ vi demo/settings.py   # Add multigtfs to INSTALLED_APPS,
                        # Update DATABASE to set ENGINE to django.contrib.gis.db.backends.postgis
                        # Update DATABASE to set NAME to test
$ ./manage.py test multigtfs.tests  # Run the tests
...
IOError: [Errno 2] No such file or directory: u'/Users/john/.virtualenvs/test/lib/python2.7/site-packages/multigtfs/tests/fixtures/test3.zip'
Especificando arquivos adicionais

Usando as sugestões das respostas, adicionei algumas diretrizes adicionais aosetup.py:

from __future__ import unicode_literals
# setup.py now requires some funky binary strings
...
setup(
    name='multigtfs',
    packages=find_packages(),
    package_data={b'multigtfs': ['test/fixtures/*.zip']},
    include_package_data=True,
    ...
)

Isso instala os arquivos zip (assim como o README) na pasta e os testes agora são executados corretamente. Obrigado pelas sugestões!

questionAnswers(6)

yourAnswerToTheQuestion