Как контролировать, какие файлы включены в колесо? Похоже, что MANIFEST.in
не используется python setup.py bdist_wheel
.
UPDATE
Я ошибся в разнице между установкой из исходного tarball и колесом. Исходный дистрибутив включает файлы, указанные в MANIFEST.in
, но установленный пакет содержит только файлы python. Требуются шаги для идентификации дополнительных файлов, которые должны быть установлены, независимо от того, установлена ли установка через дистрибутив источника, яйцо или колесо. А именно, package_data требуется для дополнительных файлов пакета и data_files для файлов вне вашего пакета, таких как сценарии командной строки или системных конфигурационных файлов.
Оригинальный вопрос
У меня проект, где я использовал python setup.py sdist
для сборки моего пакета, MANIFEST.in
для управления включенными и исключенными файлами и pyroma и check-manifest, чтобы подтвердить мои настройки.
Недавно я преобразовал его в двойной код Python 2/3 и добавил setup.cfg с
[bdist_wheel]
universal = 1
Я могу построить колесо с python setup.py bdist_wheel
, и оно, по-видимому, является универсальным колесом. Однако он не включает все файлы, указанные в MANIFEST.in
.
Что устанавливается?
Я углубился, и теперь знаю больше об упаковке и колесе. Вот что я узнал:
Я загружаю два файла пакета в проект multigtfs на PyPi:
-
multigtfs-0.4.2.tar.gz
- исходный tar-мяч, включающий все файлы вMANIFEST.in
. -
multigtfs-0.4.2-py2.py3-none-any.whl
- Бинарное распределение, о котором идет речь.
Я создал две новые виртуальные среды с Python 2.7.5 и установил каждый пакет (pip install multigtfs-0.4.2.tar.gz
). Эти две среды практически идентичны. У них разные файлы .pyc
, которые являются "скомпилированными" файлами Python. Существуют файлы журналов, которые записывают разные пути на диске. Установка из исходного tar-шара включает в себя папку multigtfs-0.4.2-py27.egg-info
, подробно описывающая установку, а установка колеса имеет папку multigtfs-0.4.2.dist-info
с подробностями этого процесса. Однако, с точки зрения кода, использующего проект multigtfs, нет никакой разницы между двумя способами установки.
Явным образом, ни один из них не имеет .zip файлов, используемых в моем тесте, поэтому набор тестов не будет выполнен:
$ 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'
Указание дополнительных файлов
Используя предложения из ответов, я добавил несколько дополнительных директив в setup.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,
...
)
Это устанавливает файлы zip (а также README) в папку, и тесты теперь выполняются правильно. Спасибо за предложения!