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