2010-09-11 17 views
13

Soy un principiante con Django y tengo problemas para instalar django-basic-apps usando pip.¿Cómo es que pip install usando git es diferente a simplemente clonar un repositorio?

Si hago esto ...

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

$ pip install -r requirements.txt 

termino con lib/python2.6/site-packages/basic/blog que no tiene un directorio de plantillas.

Si hago esto ...

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

termino con una copia de basic/blog que tiene un directorio de plantillas.

Sospecho que algo sobre django-basic-apps o pip hace que no se pueda instalar a través de pip. Pensé que quizás leer django-basic-apps 's setup.py me llevaría a la respuesta, pero no pude verlo.

(debo añadir que si instalo sin utilizar PIP, soy capaz de conseguir django-basic-apps funcionando muy bien.)

Respuesta

25

Cuando se utiliza "PIP" para instalar algo, se utiliza el setup.py del paquete para determinar qué paquetes para instalar. Y este proyecto es setup.py, si lo estoy leyendo correctamente, dice "simplemente instale estos paquetes de Python dentro del directorio basic" - el setup.py no menciona absolutamente ningún archivo que no sea de Python que quiera incluir en la instalación.

Esto podría ser deliberado por parte del desarrollador, ya que es una tradición que los paquetes Django no incluyan plantillas - notoriamente, incluso algo tan básico como el django.contrib.auth incorporado viene sin plantillas y hace que construyas su pequeño se forma desde cero cada vez! (O, para cortar y pegar de ejemplos en otra parte de la web.)

Pero si usted mismo desea que las plantillas se instalen con esta distribución de Python, independientemente de cómo el autor haya configurado las cosas, simplemente enumere las plantillas en el setup.py! En primer lugar, añadir algo como esto en el fichero de setup.py:

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

A continuación, añadir una última variable a la llamada setup() de modo que termine de esta manera:

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

Esta afirma que la función setup() que cada El paquete debe ir acompañado de los archivos de datos que se encuentran mediante la búsqueda de archivos HTML debajo del directorio templates de cada paquete.

Pruébalo y avísame si esto también funciona en tu máquina.

+2

Gracias Brandon. Funcionó, pero lo más importante, lo entiendo mejor ahora. ¡Gracias! – golliher

+1

¡De nada! Debo señalar, para lectores futuros, que el código anterior es un poco frágil y solo funciona para plantillas de hasta dos directorios en el interior de "templates.html"; un ejemplo completo podría 'os.walk()' el árbol completo y encontrar todos los archivos '.html' sin importar la profundidad. Lástima que los patrones 'package_data' no admitan la convención zsh (1):' templates/**/*. Html' –

+2

Gracias Brandon, excelente respuesta. FWIW: dudo mucho que esto sea intencional; Sería inusual incluir las plantillas en esa ubicación en el repositorio de origen si no estaban destinadas a ser utilizadas con la aplicación.El empaque simple falla es mucho más probable; He archivado un error con el proyecto para asegurarme de que el autor conoce este problema. –

Cuestiones relacionadas