Dudas iniciales

Chema Cortés py en ch3m4.org
Mie Mayo 5 10:26:42 CEST 2004


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.

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/

¿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


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

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 :-)

Uffff!!!
------------ 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