[Python] Come scrivere uno script da installare in /usr/bin con setup.py?
Alessandro Dentella
sandro a e-den.it
Dom 20 Mar 2011 21:15:56 CET
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.org SQLkit home page - PyGTK/python/sqlalchemy
Maggiori informazioni sulla lista
Python