Empotrar módulos.

Pepe Aracil pepe en diselpro.com
Jue Ene 25 12:25:30 CET 2007


Aquí tenéis (por si le interesa a alguien) una beta del programa
que empotra módulos dentro del script principal.

Los parámetros son:

boundmod.py fichero_salida script_principal lista_de_modulos_a_empotrar

#! /usr/bin/python

import sys
import zlib
from os.path import *

# Argumentos del script
output = sys.argv[1]
main = sys.argv[2]
modules = sys.argv[3:]


of = file(output,"w")

of.write("""#! /usr/bin/python
import sys
import imp
import zlib
""")

for mo in modules:
   mo_name = splitext(basename(mo))[0]
   mf = file(mo,"r")
   tmp = zlib.compress(mf.read()).encode("base64")
   mf.close()
   of.write("""\n### Start of embedded module %s ###\n""" % mo_name)
   of.write("str_module = '''%s'''\n" % tmp)
   of.write("""tmp_module = imp.new_module("%s")\n""" % mo_name)
   of.write("""exec zlib.decompress(str_module.decode("base64")) in tmp_module.__dict__\n""")
   of.write("""if not "%s" in sys.modules: sys.modules["%s"] = tmp_module\n""" % (mo_name,mo_name))
   of.write("""### End of embedded moduled %s ###\n""" % mo_name)

of.write("""\ndel(tmp_module,str_module)\n\n""")
of.write("""### Start of main script ###\n""")
mf = file(main,"r")
of.write(mf.read())
mf.close()
of.close()

--- fin ---



Pepe Aracil escribió:
> Hola.
> 
> Estoy desarrollando una aplicación para pyS60 (python para nokia S60).
> Esta aplicación depende de unos módulos (smtplib entre otros) que no
> están en la distribución oficial de pyS60.
> 
> El caso es que he conseguido portar estos módulos, pero me gustaría
> que mi aplicación fuera un solo fichero .py para no liar al personal.
> 
> ¿Como puedo empotrar varios módulos en un solo fichero .py?
> 
> ¿Si meto un módulo entero dentro de una cadena en base64, hay forma
> luego de importarlo con el módulo imp?
> 
> Gracias.
> 
> 
> 
> _______________________________________________
> 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