Sto creando un'app che scarica e installa i propri plugin egg, ma ho un problema nel caricare l'egg dopo che easy_install lo ha estratto. Questo è come funziona la società:Come installare facilmente il plug-in egg e caricarlo senza riavviare l'applicazione?
- App uovo download nella cartella Temp
- Installa uovo con setuptools.command.easy_install.main() in ~/.app/plugins cartella (che è indicato da un pth su dist-packages)
- a questo punto, il ~/.apps/plugins/easy-install.pth viene aggiornato con il nuovo percorso uovo
il problema è che il PTH non è ricaricato fino a quando il processo di pitone viene riavviato, il che significa che l'app deve essere arrestata e riavviata (l'app è un processo di lunga durata e l'installazione del plugin deve non richiede un riavvio).
Quindi la domanda è come, o ricaricare il p del programma in modo che la scoperta del punto di ingresso del plugin funzioni per il nuovo uovo, o in qualche modo avere easy_install restituisca il percorso in cui ha installato l'uovo, così posso manualmente (con pkg_resources) caricare il nuovo plugin?
Potrei creare una funzione che tenta di indovinare il percorso easy_install'ed o analizzare il pth da solo, ma preferisco non farlo, se possibile.
Python 2.6, setuptools 0.6c9
Grazie a Marius Gedminas, quello che sto facendo ora è fondamentalmente:
dist = pkg_resources.get_distribution(plugin_name)
entry = dist.get_entry_info(entry_point_name, plugin_name)
plugin = entry.load()
Non so molto su setuptools, ma hai provato la funzione di 'ricarica '? [docs] (http://docs.python.org/library/functions.html#reload) o http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module ? – cji
Sì, ma ricaricare non è abbastanza. Ho provato a ricaricare il modulo del sito (che penso sia responsabile della lettura di pth) ma non ha fatto nulla. Anche site.addsitedir (os.path.expanduser ('~/.app/plugins')), che sembra aggiungere il nuovo egg nell'elenco sys.path, non è sufficiente per renderlo importable (import plugin_name) o rilevabile per pkg_resources. – lkraider
zc.buildout fa qualcosa del genere, anche se non vorrei provare a leggere il suo codice sorgente. Hai provato a chiedere sulla mailing list distutils-sig? –