Re: [Python] Come scrivere uno script da installare in /usr/bin con setup.py?
On Sat, Mar 19, 2011 at 05:43:31PM +0100, Marco Giusti wrote: > On Sat, Mar 19, 2011 at 12:10:10PM +0100, lex mlist wrote: > > Giorno a tutti, > > > > quello che vorrei ottenere è uno script da eseguire per automatizzare alcuni > > processi. > > Non è conveniente spostare sempre lo script perchè potrebbe essere > > utilizzato in qualsiasi directory, e quindi diverrebbe scomodo. > > Non vorrei dover far settare a mano la variabile d'ambiente in cui ricercare > > lo script. > > > > Pensavo quindi di affidarmi al setup.py e all'argomento 'scripts' della > > funzione setup. > > setup.py, ovvero distutils/setuptools/distribute (c'è un po' di > confusione dietro) ti permette di installare i tuoi script in > determinate cartelle "speciali", ovvero che sono presenti in $PATH, > questo in unix, in windows credo che sia %PATH ma non so' di sicuro. > > lo script che vai ad installare deve essere uno script che deve essere > eseguibile o, se non ricordo male, una chiamata ad una funzione. qui[1] > puoi vedere un esempio su come creare uno script eseguibile, mentre > qui[2] puoi vedere come settare setuptools/distribute affiché ti creino > uno script che sia eseguibile e che sia installato nella giusta > directory. > > [1] http://www.artima.com/weblogs/viewpost.jsp?thread=4829 > [2] > http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation > > [...] > > Ho provato a dare una occhiata al file generato e ho modificato execfile > > con exec. Ma poi mi viene a dare un errore tipo: > > bhé, non puoi pensare di cambiare una chiamata a funzione e pensare che > il programmi funzioni ancora solo perché il nome si assomiglia. > > tu in realtà non hai bisogno di simulare il comportamento di > setuptools/ecompagni quando in realtà ci penseranno loro a fare tutto il > lavoro per te, in setup.py: > > setup( > name='...', > # ... > entry_points = { > 'console_scripts': [ > 'nome_dell_eseguibile': > 'package.some_module:main_func', > ] > } > ) nel link della documentazione in [2] l'esempio è: setup( # other arguments here... entry_points = { 'console_scripts': [ 'foo = my_package.some_module:main_func', 'bar = other_module:some_func', ], 'gui_scripts': [ 'baz = my_package_gui.start_func', ] } ) dove c'è una differenza che non capisco se è voluta o meno. Nelle console_scripts usa :main_func, mentre in gui_scripts usa .start_func (ovvero con . invece che :). A me funziona solo se metto ':'. Inoltre non mi è chiaro se è voluto od accidentale che metta la start_func esattamente nel package mentre suggerisce per la console_script che sia in un modulo... sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come scrivere uno script da installare in /usr/bin con setup.py?
On Sun, Mar 20, 2011 at 09:15:56PM +0100, Alessandro Dentella wrote: [...] > nel link della documentazione in [2] l'esempio è: > > setup( > # other arguments here... > entry_points = { > 'console_scripts': [ > 'foo = my_package.some_module:main_func', > 'bar = other_module:some_func', > ], > 'gui_scripts': [ > 'baz = my_package_gui.start_func', > ] > } > ) > > dove c'è una differenza che non capisco se è voluta o meno. Nelle > console_scripts usa :main_func, mentre in gui_scripts usa .start_func > (ovvero con . invece che :). A me funziona solo se metto ':'. credo che sia un errore. leggi di seguito... > Inoltre non mi è chiaro se è voluto od accidentale che metta la start_func > esattamente nel package mentre suggerisce per la console_script che sia in > un modulo... anche questo credo che sia accidentale o meglio, non vorrei che volutamente abbiano creato un esempio col quale dimostrano che è possibile creare uno script direttamente dal modulo piuttosto che da una funzione. in questo caso avrebbe senso '.' al posto di ':'. non ho fatto prove, sono lasciate come esercizio al lettore ;-) ciao m. -- Nessuno come me si è creato una società reale evocando delle ombre; al punto che la vita dei miei ricordi assorbe il sentimento della mia vita reale. -- René de Chateaubriand, Mémoires d'Outre-tombe ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come scrivere uno script da installare in /usr/bin con setup.py?
Ti ringrazio Marco, la tua risposta è più che esauriente. Ho letto il primo dei due link, domani impegni permettendomi leggerò per bene anche il secondo :) A questo punto non mi resta che provare, ammetto di non aver creato uno script tipo quello di Van Rossum, ma il principio è lo stesso. if __name__ == '__main__': esegui_funzione() Domani provo a rileggermi per bene anche il primo, magari mi sono perso qualcosa (considerando che son saltato subito ai codici). Il giorno 19 marzo 2011 17:43, Marco Giusti ha scritto: > tu in realtà non hai bisogno di simulare il comportamento di > setuptools/ecompagni quando in realtà ci penseranno loro a fare tutto il > lavoro per te, in setup.py: > >setup( >name='...', ># ... >entry_points = { >'console_scripts': [ >'nome_dell_eseguibile': > 'package.some_module:main_func', >] >} >) > > Io lo script lo installavo con l'opzione 'scripts' come segue: script( ... scripts = ['scripts/testdev.py'], ... ) proverò quanto prima il sistema che mi hai appena illustrato. Il file che modificavo era quello generato proprio dalla opzione 'develop' sul file setup.py come appena descritto. Pensavo potesse essere un problema del porting di setuptools alla versione 3 e quindi provai anche con 'install' (usando distutils) ma stesso risultato, quindi sono giunto alla conclusione che fosse lo script scritto in maniera errata. Ovviamente chiamando l'interprete da terminale sul file lo stesso funziona e fà quanto dovuto. leggiti il post del sign. van Rossum e poi la documentazione di > setuptools o di distribute, meglio, sopratutto il paragrafo che ti ho > indicato. > Lo farò, in ogni caso (successo o ulteriori problemi) aggiornerò il thread :) Grazie ancora e buona notte! ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python