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