[Python-es] OT py2exe y windows XP

damufo damufo en gmail.com
Mie Feb 17 22:37:37 CET 2010



En 2010/02/15 22:13, Manuel Alejandro Cerón Estrada escribiu:
> Hola.
>
> El día 15 de febrero de 2010 15:53, Dr. Bobus<drbobus en gulic.org>  escribió:
>> Hola todos:
>>
>> No se si es muy correcto enviar este mensaje a esta lista, pero quería saber si puede alguien ayudarme.
>>
>> Un amigo me ha pedido un pequeño script para transformar unos ficheros antiguos dbf a algo que pueda usar (csv).
>>
>> El script lo he hecho usando el paquete dbf de Ethan Furman (ver 0.84.18) [1]. Abro los ficheros, realizo las transformaciones que me pidió y lo grabo en csv.
>>
>> El asunto funciona tan ricamente, pero mi amigo usa windows y no tiene python instalado. La cosa es que le "compilé" el script con py2exe.
>>
>> Tras "compilarlo" lo he probado en varias instalaciones windows que tengo a mano (Windows 2000, windows XP y Windows 7) y funciona perfecto. Sin embargo, a él no le funciona (usa windows XP último service Pack). Me comenta que al ejecutarlo le dice:
>>
>> "no se pudo iniciar la aplicacion porque su configuracion es incorrecta. Reinstalar aplicacion puede solucionar el problema."
>>
>> La verdad es que el programa no necesita ninguna instalación ni configuración, copiarlo en una carpeta, poner en ella los ficheros a transformar y darle doble clic. Así funciona en todas las pruebas que he hecho. No se precisan permisos de administrador ni nada por el estilo. El programa no hace nada más que abrir y cerrar ficheros. Donde lo he probado lo he ejecutado como usuario normal.
>>
>> He estado mirando en Google y sólo he encontrado una entrada que no me resuelve nada. No tengo ni idea de lo que esta diciendo Windows.
>>
>> Las opciones para la generación en py2exe fueron:
>> "py2exe":{
>>     "unbuffered": True,
>>     "optimize": 2,
>>     "excludes": ["pywin", "pywin.debugger", "pywin.debugger.dbgcon",
>>                  "pywin.dialogs", "pywin.dialogs.list",
>>                  "Tkconstants","Tkinter","tcl"
>>                  ]
>>      }
>>
>> Esto lo hice en una instalación de Python 2.6.4 usando las librerias estandar salvo la comentada para manejar ficheros dbf.
>>
>>
>> Alguna ayuda?
>
> Tu problema ocurre porque los binarios oficiales de Python 2.6 para
> Windows son compilados con MS Visual C++ 9 y por lo tanto dependen de
> una biblioteca llamada 'msvcr90.dll'. En tus instalaciones de Windows
> el programa funciona bien porque probablemente ya tengas una
> aplicación que use esta biblioteca y la haya instalado en tu sistema.
> El mismo Python 2.6 instala esta biblioteca.
>
> Ahora la solución es sencilla: tienes que distribuir tu programa junto
> con la librería 'msvcr90.dll' y el archivo manifiesto
> 'Microsoft.VC90.CRT.manifest'. Estos archivos deben estar en algún
> lugar de tu disco duro, pero si quieres conseguirlos fácilmente,
> instala Python 2.6 en modo "Sólo para este usuario" y te aparecerán en
> la carpeta C:\Python26 o dónde lo hayas instalado.
>
> Espero que te sirva.
>
> Manuel.
Hola:
A mi me pasa lo mismo, he incluido el 'msvcr90.dll' y el archivo 
manifiesto y nada.

este es mi setup.py
# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe

manifest = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
     version="0.64.1.0"
     processorArchitecture="x86"
     name="Controls"
     type="win32"
/>
<description>sync</description>
<dependency>
     <dependentAssembly>
         <assemblyIdentity
             type="win32"
             name="Microsoft.Windows.Common-Controls"
             version="6.0.0.0"
             processorArchitecture="X86"
             publicKeyToken="6595b64144ccf1df"
             language="*"
         />
     </dependentAssembly>
</dependency>
</assembly>
"""


setup(
      windows=[
          {'script': 'sync.py',
          "icon_resources": [(0, "./ico.ico"),(1, "./ico.ico")],
          "name":'sync',
          "version":'0.1',
          "description":'Descripción de tu aplicación',
          "author":'tu_nombre',
          "author_email":'tu_mail',
          "url":'tu_web'}],
      options={
          "py2exe":{
              "unbuffered": True,
              "optimize": 0,
              "bundle_files":1
                  }
              }
      )


Otra cosa es que si le pongo optimize a 2, no va (ni en mi equipo) da 
error al encontrar las bibliotecas ¿?.



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