Come gestire diversi sottoprogetti pitone con setuptools?
-
01-10-2019 - |
Domanda
mi chiedo il più semplice / modo corretto / più divinatorio di trattare con sottoprogetti che si desidera avere con lo stesso pacchetto di base. Al momento abbiamo una struttura di file in questo modo:
trunk\
proj1\setup.py
company_name\__init__.py + proj1's code
proj2\setup.py
company_name\__init__.py + proj2's code
Vogliamo mantenere il comune namespace company_name a tutti i nostri progetti (forse questo è di per sé unpythonic?), Ma quando proj1 e proj2 sono installati in modalità sviluppo, il primo installato viene rotto. Sembra import company_name...
si confonde su quale pacchetto company_name a guardare e afferra la prima / ultima / random uno.
Come questo normalmente essere gestito in un progetto più ampio pitone? E 'possibile risolvere questo con una setup.py nel bagagliaio che costruisce una sorta di mega-uovo? Non ho trovato alcuna informazione rilevante su google o pila, quindi ogni informazione anche solo collegamenti sono molto apprezzate!
modifica: Ho appena provato ad aggiungere un setup.py nella radice cartella con
...
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...
con adeguate pkg_resources.declare_namespace(__name__)
nei file __init_.py
, ma ./setup.py bdist_egg
dà solo:
errore nel comando di installazione company_name: Distribuzione non contiene moduli o pacchetti per il pacchetto namespace 'company_name'
Soluzione
Mentre non posso garantire per la pythonity della mia soluzione, ho finalmente arrivare le diverse applicazioni in esecuzione insieme bene. Io ero sulla strada giusta con i pacchetti namespace, ma invece di cercare di avere un super-progetto nel bagagliaio, ho aggiunto la linea namespace_packages
nel setup.py di ogni singolo progetto. Ciò ha portato alla comportarsi correttamente quando installato insieme, condividendo lo spazio dei nomi company_name
come previsto.
Chiunque voglia carillon in su montone castrato questa è una soluzione ragionevole pitone, sono ancora interessato a sapere se questo è "il modo in cui è fatto". Ci si sente bene, ma che potrebbe essere perché imita lo stile java Sono più abituato.