Publicado el 5 de Mayo del 2018
540 visualizaciones desde el 5 de Mayo del 2018
670,2 KB
50 paginas
Creado hace 13a (01/05/2011)
Tema 8 Distribución del código
Curso de Python Avanzado
Juan Pedro Bolívar Puente
Instituto Andaluz de Astrofísica
Mayo de 2011
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
1 / 49
Índice
Introducción
1
2 Paquetes
3 Distribuyendo el software
4 Python Package Index
5 Conclusiones
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
2 / 49
Índice
Introducción
Introducción
1
2 Paquetes
3 Distribuyendo el software
4 Python Package Index
5 Conclusiones
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
3 / 49
Introducción
Introducción
distutils = utilidades para la
distribución del código
Permite
Gestionar los metadados del paquete
Gestionar la compilación de módulos sencillos
Gestionar las instalación del software
Crear paquetes para su distribución
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
4 / 49
Introducción
Ejemplo de programa
$ python setup.py --help
$ python setup.py --help-commands
$ python setup.py --author
$ python setup.py --provides
$ python setup.py install
Después de instalar podemos usarlo en cualquier sitio
from crazymod import mod
mod . c ra zy f un c ()
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
5 / 49
Índice
Paquetes
Introducción
1
2 Paquetes
3 Distribuyendo el software
4 Python Package Index
5 Conclusiones
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
6 / 49
La base de distutils
Paquetes
La base de distutils es la función
distutils.core.setup
Ejecuta el script que hemos visto
Parámetros por clave modifican su comportamiento
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
7 / 49
Ejemplo
Paquetes
packages indica una lista de paquetes ...
from d is tu t il s . core import setup
setup (
= ’ Cr a zy So f t ’ ,
= ’ 1.3 ’ ,
= ’ Crazy package that is .. ’ ,
= ’ Crazy Author ’ ,
name
version
d e s c r i p t i o n
author
a u t h o r _ e m a i l = ’ r a s k o l n i k o v @ g n u . org ’ ,
url
packages
)
= ’ http :// www . iaa . es ’ ,
= [ ’ crazymod ’] ,
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
8 / 49
Buscando automáticamente ...
Paquetes
find packages los busca automáticamente ...
from d is tu t il s . core import setup
from d is tu t il s . core import f i n d _ p a c k a g e s
setup (
= ’ Cr a zy So f t ’ ,
= ’ 1.3 ’ ,
= ’ Crazy package that is .. ’ ,
= ’ Crazy Author ’ ,
name
version
d e s c r i p t i o n
author
a u t h o r _ e m a i l = ’ r a s k o l n i k o v @ g n u . org ’ ,
url
packages
)
= ’ http :// www . iaa . es ’ ,
= f i n d _ p a c k a g e s () ,
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
9 / 49
Encontrando paquetes
Paquetes
Aunque es mejor ser explícito ...
Cuando nombre del paquete = nombre del directorio ...
p a c k a g e _ d i r = { ’ ’:
’ lib ’}
p a c k a g e _ d i r = { ’ foo ’ : ’ lib ’}
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
10 / 49
Módulos
Paquetes
En programas pequeños hay módulos sueltos ...
p y _ m o d u l e s = [ ’ mod1 ’ , ’ pkg . mod2 ’]
¡Los paquetes tienen que tener su
init .py de todas formas!
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
11 / 49
Metadatos
Paquetes
author Lista con los autores del proyecto
author email Lista con los correos de los autores, si
quieren recibir correos
contact Persona de contacto
contact email Debes proveerlo
description Descripcion corta, idealmente de < 80
caracteres
long description Descripcion completa
fullname Nombre completo
keywords Etiquetas
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
12 / 49
Metadatos
Paquetes
license ¡Poner siempre!
maintainer Poner si es diferente del autor
maintainer email Y su correo
name Nombre como ¡idenficador válido!
platforms Lista de plataformas donde crees que
funciona...
url Página oficial
version Versión del proyecto
classifiers Lista de Trove classifiers
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
13 / 49
Clasificadores
Paquetes
http://pypi.python.org/pypi?%3Aaction=list_classifiers
’Development Status :: 4 - Beta’,
’Environment :: Console’,
’Environment :: Web Environment’,
’Intended Audience :: End Users/Desktop’,
’Intended Audience :: Developers’,
’Intended Audience :: System Administrators’,
’License :: OSI Approved :: Python Software Foundation License’,
’Operating System :: MacOS :: MacOS X’,
’Operating System :: Microsoft :: Windows’,
’Operating System :: POSIX’,
’Programming Language :: Python’,
’Topic :: Communications :: Email’,
’Topic :: Office/Business’,
’Topic :: Software Development :: Bug Tracking’,
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
14 / 49
Clasificadores
Paquetes
http://pypi.python.org/pypi?%3Aaction=list_classifiers
’Development Status :: 4 - Beta’,
’Environment :: Console’,
’Environment :: Web Environment’,
’Intended Audience :: End Users/Desktop’,
’Intended Audience :: Developers’,
’Intended Audience :: System Administrators’,
’License :: OSI Approved :: Python Software Foundation License’,
’Operating System :: MacOS :: MacOS X’,
’Operating System :: Microsoft :: Windows’,
’Operating System :: POSIX’,
’Programming Language :: Python’,
’Topic :: Communications :: Email’,
’Topic :: Office/Business’,
’Topic :: Software Development :: Bug Tracking’,
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
15 / 49
Instalando scripts
Paquetes
scripts =[ ’ scripts / x m l p r o c _ p a r s e ’ ,
’ bin / x m l p r o c _ v a l ’]
Se instalan en $PREFIX/bin
Si la primera linea es #! y contiene la palabra
python entonces se cambia por el interprete de
Python local durante la instalación
--excutable permite al usuario cambiarlo a mano
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
16 / 49
Ficheros de datos
Paquetes
Datos asociados a un paquete
p a c k a g e _ d a t a ={ ’ mypkg ’: [ ’ data /*. dat ’ ]} ,
Los ficheros contienen globs
Están relativos al directorio del paquete
Las jerarquías de directorios las crea el instalador
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
17 / 49
Ficheros de datos
Paquetes
Fichero que de los que
el código no depende tanto
d a t a _ f i l e s =[( ’ bitmaps ’ , [ ’ bm / b1 . gif ’ , ’ bm / b2 . gif ’ ]) ,
( ’ config ’ , [ ’ cfg / data . cfg ’ ]) ,
( ’/ etc / init . d ’ , [ ’ init - script ’ ])]
Las rutas destino relativas lo son a sys.prefix
Están relativos al directorio actual
Del fuente sólo se mantiene el nombre del fichero
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
18 / 49
Dependencias
Paquetes
Podemos especificar las
dependencias con depends
Se pueden poner la versión con comparadores
setup (
depends = [ ’ pyfits ’ ,
’ pygtk >= 2.12 ’]
)
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
19 / 49
Dependencias
Paquetes
provides y obsoletes permiten
definir qué dependencias proveemos
setup (
provides = [ ’ mymod ’ , ’ mypkg (3.2) ’] ,
o bs ol e te s = [ ’ oldmod < 2.0 ’]
)
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
20 / 49
Extensiones
Paquetes
Automatizamos la compilación e
instalación de extensiones
from d is tu t il s . core import setup , E xt e ns io n
setup (... ,
e x t _ p a c k a g e = ’ pkg ’ ,
e x t _ m o d u l e s =[
E xt en s io n ( ’ foo ’ , [ ’ f1 . c ’ , ’ f2 . c ’ ]) ,
E xt en s io n ( ’ subpkg . bar ’ , [ ’ bar . c ’ ])] ,
)
También soporta .i para SWIG
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
21 / 49
Extensiones
Paquetes
A Extension le podemos pasar parámetros
include dirs Directorios de los includes
define macros Macros del preprocesador
undef macros Que desdefinir
library dirs Para buscar bibliotecas
libraries Con las que enlazar
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
22 / 49
El asunto de Ctypes
Paquetes
¿Cuidado con ctypes?
Mi hack personal :)
def l o a d _ c t y p e s _ e x t e n s i o n ( name ):
lib = None
for x in sys . path :
try :
lib = cdll . L o a d L i b r a r y ( path . join (x , name ))
break
except OSError :
pass
if not lib :
raise ImportError , " Could not find C lib ... "
return lib
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
23 / 49
Distribuyendo el software
Índice
Introducción
1
2 Paquetes
3 Distribuyendo el software
4 Python Package Index
5 Conclusiones
Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)
Tema 8 Distribución del código
Mayo de 2011
24 / 49
Distribuyendo el software
Distribuyendo el software
$ python setup.py sdist
Genera un tarball que incluye ...
Los fuentes de los py
Comentarios de: Tema 8 Distribución del código - Curso de Python Avanzado (0)
No hay comentarios