2010-09-11 3 views
13

Я начинаю с Django, и мне сложно устанавливать django-basic-apps, используя pip.Как установить pip с помощью git, отличного от клонирования репозитория?

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

$ 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 или пипса не может быть установлено через пип. Я думал, что, может быть, чтение django-basic-apps's setup.py приведет меня к ответу, но я не мог его увидеть.

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

ответ

25

При использовании «пип», чтобы установить что-то, пакет-х 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 каждого пакета.

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

+2

Спасибо, Брэндон. Это сработало, но что более важно, теперь я понимаю это лучше. Спасибо! – golliher

+1

Добро пожаловать! Для будущих читателей я должен отметить, что приведенный выше код немного хрупкий и работает только для шаблонов до двух каталогов в глубине «templates.html»; полноценный пример может 'os.walk()' целое дерево и найти все '.html' файлы, однако глубокие. Слишком плохо, что шаблоны 'package_data' не поддерживают соглашение zsh (1):' templates/**/*. Html' –

+2

Спасибо Брэндон, отличный ответ. FWIW Я очень сомневаюсь, что это намеренно; было бы необычно включать шаблоны в это место в исходном репо, если они не предназначались для использования с приложением.Простой упаковочный сбой гораздо более вероятен; Я зарегистрировал ошибку в проекте, чтобы убедиться, что автор знает об этой проблеме. –

Смежные вопросы