2010-08-26 21 views
7

Me pregunto cuál es la forma correcta/más fácil/más pitónica de tratar los subproyectos que desea utilizando el mismo paquete base. Actualmente contamos con una estructura de archivos como esto:¿Cómo administrar varios subproyectos de python con setuptools?

trunk\ 
    proj1\setup.py 
      company_name\__init__.py + proj1's code 
    proj2\setup.py 
      company_name\__init__.py + proj2's code 

queremos mantener la company_name espacio de nombres comunes a todos nuestros proyectos (? tal vez esto sí es unpythonic) pero cuando proj1 y Proj2 se instalan en el modo de desarrollo, el primero instalado se rompe. Parece que import company_name... se confunde con el paquete company_name para buscar y toma el primero/último/aleatorio.

¿Cómo se manejaría esto normalmente en un proyecto python más grande? ¿Es posible resolver esto con un setup.py en el maletero que construye una especie de mega-huevo? No he encontrado ninguna información relevante en google o stack, por lo que cualquier información, incluso solo enlaces, son muy apreciados.


edición: he intentado añadir un setup.py en la carpeta raíz con

...  
namespace_packages = ['company_name'], 
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']} 
... 

con pkg_resources.declare_namespace(__name__) apropiada en los archivos __init_.py, pero apenas da ./setup.py bdist_egg:

error en comando de instalación nombre_compañía: la distribución no contiene módulos o paquetes para el paquete de espacio de nombres 'nombre_empresa'

Respuesta

6

Aunque no puedo dar fe de la pythonity de mi solución, finalmente conseguí que las diferentes aplicaciones funcionaran bien juntas. Estaba en el camino correcto con los paquetes de espacio de nombres, pero en lugar de tratar de tener un superproyecto en el tronco, agregué la línea namespace_packages en el archivo setup.py de cada proyecto individual. Esto condujo a un comportamiento correcto cuando se instalaron juntos, compartiendo el espacio de nombre company_name como estaba previsto.

Cualquiera que quiera saber si esta es una solución razonable de Python, todavía estoy interesado en saber si esta es "la forma en que se hace". Se siente bien, pero podría ser porque imita el estilo de Java al que estoy más acostumbrado.

+3

Para eso diseñé la palabra clave 'namespace_packages', por lo que de hecho lo hizo de la manera correcta. –

+0

Mi empresa comenzó a usar paquetes de espacios de nombres y terminó siendo un gran error con muchas funcionalidades que se rompieron con ellos y que están disponibles en proyectos normales (pruebas de unidades en ejecución, instalaciones complejas, etc.). Solo una palabra de advertencia. – Lucas

Cuestiones relacionadas