2012-09-26 16 views
5

Estoy desarrollando un proyecto django, usando git para la administración de código. El proyecto principal tiene varias aplicaciones como submódulos, cada uno de los cuales se puede usar de forma independiente, por lo que cada uno se encuentra en repositorios git separados. Todas estas aplicaciones están en desarrollo, y al menos una se bifurca de otro proyecto. Estas aplicaciones se pueden instalar a través de pip, al clonar el repositorio, hay setup.py y README, etc. en la raíz, luego la aplicación real en una subcarpeta.¿Cómo desarrollar múltiples paquetes de pip en un proyecto de git?

Si instalo la (s) aplicación (es), el código de trabajo estará en una ubicación diferente a la de la administración de git, así que cada vez que cambie el código necesitaría pip install (¿o hay otra pipa? comando para esto?) para actualizar el código donde lo está buscando pitón

Podría usar pip install -e para evitar la situación anterior. Sin embargo, entonces necesitaría tener cada aplicación clonada en carpetas separadas: no puedo simplemente clonar las aplicaciones en project/apps y tener project/apps/foo y project/apps/bar ya que ambos intentarían dejar su setup.py en project/apps. En cambio, necesitaría clonar foo en project/apps/foo pero luego el código real está en project/apps/foo/foo. Esto me parece feo y no muy django-ish.

¿Hay alguna otra manera más bonita de hacer lo que estoy tratando de hacer?

+0

Estoy un poco confundido: debería instalar estas aplicaciones con 'pip' o clonar las aplicaciones directamente y usarlas. En casi todos los casos, utilizará un submódulo o un pip (probablemente a través de un archivo de requisitos) pero no ambos. –

Respuesta

3

Creo que lo que realmente quieres usar es un requirements file (en lugar de utilizar submódulos de git) junto con un virtualenv para tu proyecto.

Con los archivos requisitos, puede clonar repositorios directamente de una rama determinada o cometer, por ejemplo:

requirements.txt:

Django==1.4.1 
South==0.7.6 
git+git://github.com/fabric/fabric#egg=Fabric 
git+git://github.com/toastdriven/[email protected]31d3b6e070ffab906f7c6e359c427#egg=django-tastypie 

continuación, puede ejecutar pip install -r requirements.txt.

Notarás en el ejemplo sabio que puedes bloquear tu instalación de pip en una confirmación en particular (bien mientras permanezcas en tu virtualenv), que es esencialmente lo mismo que hace un submódulo de todos modos, pero sin saturar tu git repo o estructura de archivos con paquetes cuando realmente deberían instalarse en una ubicación diferente que usted haya creado de todos modos.

+0

y si realizo cambios en esas aplicaciones, ¿puedo volver a enviarlas a github? – askvictor

+0

Claro, siempre que sean sus aplicaciones. Para proyectos personales, a menudo corrijo un error en la lib de alguien que estoy usando, presento una solicitud de extracción, luego apunto mi archivo de requisitos en mi repositorio bifurcado hasta que la solución se fusiona en sentido ascendente. –

+0

Eso es lo que hace el ajuste del 'huevo': cuando necesito usar mi tenedor de' django-tastypie', por ejemplo, cambio la línea en el archivo de requisitos para apuntar a mi tenedor, pero dejo el 'huevo' igual; esto efectivamente actualiza el paquete a la versión que desee. –

Cuestiones relacionadas