Как создать колесо из приложения django?

Многократное приложение docs (https://docs.djangoproject.com/en/1.9/intro/reusable-apps/) сообщает вам список шаблонов и статических файлов в MANIFEST.in, но он не выглядит например, python setup.py bdist_wheel вообще смотрит этот файл.

Я видел ссылки на data_files, но эти файлы находятся в каталогах относительно установки python (sys.prefix), а не в установке пакета (и sys.prefix не равномерно связан с site-packages в разных системах).

Правильно ли я полагаю, что myapp/templates/myapp/foo.html должен закончиться в .../site-packages/myapp/templates/myapp/foo.html и аналогичным образом для статических файлов и что пользователю нужно запустить manage.py collectstatic после pip install myapp?

Обновление (пример):

Следующая структура:

(build2) go|c:\srv\tmp\myapp> tree
.
|-- MANIFEST.in
|-- myapp
|   |-- static
|   |   `-- myapp
|   |       `-- foo.css
|   |-- templates
|   |   `-- myapp
|   |       `-- foo.html
|   |-- urls.py
|   `-- views.py
`-- setup.py

5 directories, 6 files

setup.py

import setuptools
from distutils.core import setup
setup(
    name='myapp',
    version='0.1.0',
    packages=['myapp']
)

MANIFEST.in

recursive-include myapp/templates *
recursive-include myapp/static *

работает python setup.py sdist и python setup.py bdist_wheel создает следующие файлы bin myapp/dist:

2016-06-18  13:47             2,073 myapp-0.1.0-py2-none-any.whl
2016-06-18  13:46             2,493 myapp-0.1.0.zip

если вы заглянете внутрь .zip файла, вы найдете шаблоны и статические папки, если вы переименуете файл .whl.zip и заглянете внутрь, каталоги не включены.

Обновление 2 (решение):

Изменение файла MANIFEST.in на

recursive-include myapp *

и setup.py в

from setuptools import find_packages, setup
setup(
    name='myapp',
    version='0.1.0',
    include_package_data=True,
    packages=['myapp'],
    zip_safe=False,
)

тогда запуск python setup.py bdist_wheel создаст файл .whl, который устанавливает myapp/templates и myapp/static в ожидаемых местах.

Ответ 1

Файл MANIFEST.in необходимо изменить на:

recursive-include myapp *

Это включает все под myapp/myapp с правильными путями. В частности, это включает myapp/myapp/templates, что необходимо.

В приведенной выше декларации также содержится myapp/myapp/static, которая может быть полезна, если вы планируете запустить manage.py collectstatic после установки файла .whl.

В setup.py функция setup должна быть импортирована из setuptools (а не distutils), то есть:

from setuptools import find_packages, setup
setup(
    name='myapp',
    version='0.1.0',
    include_package_data=True,
    packages=['myapp'],
    zip_safe=False,
)

Когда вы запустите python setup.py bdist_wheel, он создаст файл .whl, который установит myapp/templates и myapp/static в ожидаемые места.