Как установить pp с помощью git отличным от клонирования репозитория?

Я начинаю с Django, и у меня возникают проблемы с установкой django-basic-apps с помощью pip.

Если я это сделаю...

$ cat requirements.txt 
git+git://github.com/nathanborror/django-basic-apps.git

$ pip install -r requirements.txt

В итоге у меня есть lib/python2.6/site-packages/basic/blog, у которого нет каталога шаблонов.

Если я это сделаю...

git clone http://github.com/nathanborror/django-basic-apps.git

Я получаю копию basic/blog, у которой есть каталог шаблонов.

Я подозреваю что-то о django-basic-apps, или pip делает невозможным установку через pip. Я подумал, что, возможно, чтение django-basic-apps setup.py приведет меня к ответу, но я не мог этого видеть.

(Я должен добавить, что если я устанавливаю без использования pip, я могу получить django-basic-apps, работающий отлично.)

Ответы

Ответ 1

Когда вы используете "pip" для установки чего-либо, пакет setup.py используется для определения того, какие пакеты для установки. И этот проект setup.py, если я его правильно читаю, говорит: "Просто установите эти пакеты Python внутри каталога basic" - setup.py абсолютно не упоминает о каких-либо не-Python файлах, которые он хочет включить в установку.

Это может быть преднамеренно для разработчиков, поскольку для пакетов Django не обязательно включать шаблоны - как известно, даже что-то настолько простое, что встроенный django.contrib.auth поставляется без шаблонов и заставляет вас строить его маленькие формы с нуля каждый раз! (Или, чтобы вырезать и вставить из примеров в другом месте в Интернете.)

Но если вы сами хотите, чтобы шаблоны были установлены с этим дистрибутивом Python, независимо от того, как автор установил вещи, просто перечислите шаблоны в setup.py! Сначала добавьте что-то вроде этого в файл setup.py:

template_patterns = [
    'templates/*.html',
    'templates/*/*.html',
    'templates/*/*/*.html',
    ]

Затем добавьте одну последнюю переменную в вызов setup(), чтобы она заканчивалась следующим образом:

...
packages=packages,
package_data=dict( (package_name, template_patterns)
                   for package_name in packages ))

Это подтверждает функцию setup(), что каждый пакет должен сопровождаться файлами данных, которые находятся путем поиска HTML файлов под каждым каталогом templates.

Попробуйте и дайте мне знать, работает ли это на вашей машине!