Pregunta

Me pregunto acerca de la forma correcta / más fáciles / Pythonic de hacer frente a los subproyectos que desea tener con el mismo paquete básico. Actualmente contamos con una estructura de archivos como esto:

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

Queremos mantener el espacio de nombres comunes company_name 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 sobre cuál es el paquete company_name a mirar y se agarra a la primera / última / aleatoria uno.

¿Cómo sería esto normalmente ser manejado en un proyecto pitón más grande? ¿Es posible resolver este con un setup.py en el maletero que construye una especie de mega-huevo? No he encontrado ninguna información relevante en Google o pila, por lo que cualquier información incluso sólo enlaces son muy apreciadas!


Edit: he intentado añadir un setup.py en la raíz carpeta 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 company_name: Distribución no contiene módulos o paquetes para paquete de espacio de nombres 'company_name'

¿Fue útil?

Solución

Si bien no puedo dar fe de la pythonity de mi solución, Finalmente tuve las diferentes aplicaciones que se ejecutan en conjunto bien. Yo estaba en el camino correcto con los paquetes de espacio de nombres, pero en vez de tratar de tener una super-proyecto en el tronco, he añadido la línea namespace_packages en el setup.py de cada proyecto individual. Esto llevó a la comportarse adecuadamente cuando se instalan juntos, compartiendo el espacio de nombres company_name según lo previsto.

Cualquier persona que quiera carillón en el wether esta es una solución razonable pitón, todavía estoy interesado en saber si esto es "la forma en que se hace". Se siente bien, pero que podría ser debido a que imita el estilo de Java que estoy más acostumbrado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top