[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