Dudas iniciales

Fco. Javier Félix fran en imagenes3d.com
Mie Mayo 5 23:28:04 CEST 2004


El mié, 05-05-2004 a las 10:26, +0200, Chema Cortés escribió:
> El Miércoles, 5 de Mayo de 2004 00:16, Fco. Javier Félix escribió:
> > Soy nuevo en esto del Python, yo hasta ahora usaba el bash y el php par
> > hacer los scripts, pero un amigo me convenció para que lo probase y
> > desde luego no me ha defraudado lo que he visto por el momento. Pero
> > tengo unas dudas como cualquiera que empieza.
> >
> > 1º He visto que existe un compilador, como se usa?, que diferencia hay
> > entre .pyc y .pyo?, existe un descompilador? que mejora la velocidad
> > ofrece?
> 
> Resumidamente, el proceso de interpretación del código python pasa por tres 
> fases: parser, compilador y máquina virtual. En el parser se identifican los 
> objetos que intervienen, el compilador pasa todo a bytecode, y en la máquina 
> virtual se ejecuta el bytecode. Este proceso es "cíclico" que se repite a 
> medida que se avanza en la interpretación del código, y es ésto lo que le 
> diferencia de los llamados lenguajes "compilados" de máquina virtual (eg: 
> java) en los que sólo hay un ciclo y el bytecode es estático.
> 
A que te refieres con que es cíclico, que cada vez que pasa por el
source lo va volviendo a generar el .pyc, no se compilaba una vez, y
luego se ejecuta el .pyc?

> Del compilador sale el bytecode que es lo que se guarda en los ficheros .pyc 
> y .pyo . Esta compilación es muy rápida, y casi insignificante en tiempo 
> comparándolo con el tiempo de ejecución de la máquina virtual. El bytecode 
> podría estar completamente en memoria, pero se descarga a fichero para ir 
> liberando memoria. A veces, por problemas de privilegios, no se puede crear 
> el fichero bytecode, por lo que tiene que gastar más memoria para guardar 
> todo el bytecode generado. Siempre que se pueda, el intérprete leerá el 
> bytecode de los ficheros. No ocurrirá así si el fichero fuente ha sido 
> modificado, o el fichero bytecode es para otra versión de máquina virtual. Es 
> posible ejecutar sólo ficheros bytecode, sin estar disponible el fichero 
> fuente.
> 
> Dicha esta introducción, respondo a las preguntas:
> 
> ¿Cómo se usa?: su uso es transparente al usuario, creando fichero bytecode a 
> medida que va importando módulos. A veces se necesita compilar a bytecode 
> durante la instalación de algún módulo, para ello tienes módulos y utilidades 
> como compiler,  compileall,... aunque para instalar es mejor automatizar el 
> proceso con el módulo 'distutils'.
> 
> Diferencias entre .pyc y .pyo : pyo se supone que es un bytecode algo más  
> compacto, pero yo no he encontrado grandes mejoras en tiempos de ejecución. 
> Con la ópción -OO se eliminan las cadenas de documentación, lo que puede 
> ayudar a hacer más "obscuro" tu bytecode si decides distribuir tu aplicación 
> sólo en bytecode.
> 
> Descompilador: tienes el módulo 'dis' que se puede descompilar el bytecode, 
> pero no retornaría el código python. En el boa-constructor tienes un 
> interface a éste descompilador de bytecode. También existía un decompilador a 
> código python, pero lo han cerrado como servicio comercial: 
> http://www.crazy-compilers.com/decompyle/
> 
Lo del descompilar lo he comentado por si alguna vez tengo la necesidad
de realizar algun programa cerrado, y se descompilaban facilmente.

> ¿Mejora la velocidad?: es inapreciable. Mejor que no te preocupe. Si es por 
> velocidad, utiliza otras técnicas como psyco ó pyrex.
> 
> > 2º Como se pueden crear scripts que se ejecuten, al estilo de los bash y
> > php cuando les pones al principio #!/bin/bash? , los compilados también
> > se pueden ejecutar directamente?
> 
> #!/usr/bin/python
> 
> Para los que tenemos el python en otro sitio (yo lo tengo en mi directorio de 
> usuario) no funcionaría bien, ya que el enlace al intérprete de python que 
> hay en /usr/bin puede que no sea el que estás usando normalmente. Podrías 
> poner "explícitamente" la ruta al intérprete, pero lo mejor es usar el 
> comando 'env':
> 
> #!/usr/bin/env python
> 
> Si quieres puedes pasar argumentos al python, por ejemplo:
> 
> #!/usr/bin/env python -OO -i -d
> 
Con esos parametros haces que compile el .pyo, no?

> 
> Para que se ejecuten como si fueran comandos del sistema, tienes que cambiarle 
> los flags de ejecución con el chmod. En windows bastaría con poner la 
> extensión .pyw
> 
Bueno , eso ya seria lo normal

> Para los compilados hay que hacer alguna configuración extra. Mírate un 
> artículo mío donde explico todo ésto para linux: 
> http://www.zaralinux.org/modules.php?name=News&file=article&sid=153
> 
> Se podría incluso ejecutar máquinas virtuales diferentes según la versión del 
> bytecode que se use en el fichero.
> 
> 
> > 3º La mejor pagina de documentación y ejemplos en castellano?
> 
> No me gusta comparar, aunque no es porque haya mucho donde elegir. Sin un 
> orden en particular:
> 
> http://milugar.doesntexist.org
> http://hispapython.org
> http://python.freezope.org
> http://pyspanishdoc.sourceforge.net/
> http://marmota.act.uji.es/MTP/teoria.shtml
> 
> (seguramente me deje alguno)
> 
> > 4º Existe algun traductor de php a python?
> 
> Ni idea. Sería posible convertir código php a python, pero casi todo el php 
> viene incrustado en html y eso complicaría más el asunto al requerir alguna 
> de las herramientas para hacer webs en python.
> 
> > Y de momento eso es todo amigos :-)
> 
Gracias, ya no volvere a ser tan pesado. Cuesta cambiar de lenguaje, :-)

> Uffff!!!
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es