SistemasAgiles / pyafipws

Automatically exported from code.google.com/p/pyafipws
GNU General Public License v3.0
4 stars 3 forks source link

C Run-Time Error R6034 (instalador en win7 py27) #48

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
¿Que pasos reproducen el problema?
1. Instalar Python 2.7 y todas sus dependencias en Windows 7
2. Generar un instalador con python setup_xxx.py py2exe
3. Ejecutar el instalador en windows 7 (también falla en winxp)

¿Que se esperaría que sucediera? ¿que sucede en cambio?
No instala correctamente con el mensaje de error adjunto.

Python 2.7 esta compilado contra MSVCR90.DLL (Visual Studio 2008), lo que trae 
conflictos al generar el instalador porque Microsoft implementó un nuevo 
esquema de instalación "side-by-side" (assemblies) y con copiar la DLL no 
alcanza (metodo tradicional), se debe usar un nuevo "manifest".

Provisoriamente, si se usa esta versión de python (2.7), se debe instalar el 
siguiente runtime de visual estudio por separado: 
Paquete redistribuible de Microsoft Visual C++ 2008 SP1 (x86) 
http://www.microsoft.com/downloads/es-es/details.aspx?FamilyID=a5c84275-3b97-4ab
7-a40d-3802b2af5fc2

Si bien este no es un problema específicamente de Python, recomendamos usar 
Python 2.5 que no tiene problemas en ninguna versión de Windows.

Para más información ver:
http://msdn.microsoft.com/en-us/library/ms235560.aspx
http://msdn.microsoft.com/en-us/library/ms235560(v=vs.80).aspx

Original issue reported on code.google.com by reingart@gmail.com on 18 May 2011 at 9:49

Attachments:

GoogleCodeExporter commented 9 years ago
Adicionalmente, aparentemente hay un tema posiblemente relacionado a algunas 
DLL de win7 que deben ser omitidas:

"API-MS-Win-Core-LocalRegistry-L1-1-0.dll", 
"API-MS-Win-Core-ProcessThreads-L1-1-0.dll",
"API-MS-Win-Security-Base-L1-1-0.dll"
http://code.google.com/p/pyafipws/source/browse/setup_wsaa.py#27

Original comment by reingart@gmail.com on 18 May 2011 at 10:13

GoogleCodeExporter commented 9 years ago
El problema aparentemente era la versión de los redistribuibles de MSVC9.

Con el "reciente" Python 2.7.9 y "Microsoft.VC90.CRT 9.0.21022.8" (ver 
manifest) se resuelven este tipo de problemas.
Ademas, con el reciente "Microsoft Visual C++ Compiler for Python 2.7" se 
pueden compilar las extensiones más facilmente para evitar problemas similares:

http://www.microsoft.com/en-us/download/details.aspx?id=44266

No instalar el SP1, el correcto (para python 2.7) es "Microsoft Visual C++ 2008 
Redistributable Package (x86)" 

http://www.microsoft.com/en-us/download/details.aspx?id=29

Ahora se puede 

 * embeber el runtime (vcredist_x86.exe) y ejecutarlo automáticamente de modo silencioso en el instalador, con la ventaja que el paquete final instalado ocupa menor espacio (no el instalador, porque el vcredis pesa ~2MB) y en teoría es visible por el usuario y/o puede recibir actualizaciones automáticas de windows
 * embeber las DLL (msvcr90.dll, msvcp90.dll, msvcm90.dll) y el manifest side-by-side en el mismo directorio (SXS), ocupa menos de ~1MB

La última forma es más portable porque permite usar las herramientas sin 
necesidad de correr el instalador.
Igualmente el setup.py y nsis.py soporta ambas (detecta automaticamente si el 
manifest esta incluido, y no embebe el instalador) 

CONSEJO: armar una VM con Windows 8.1 y no tener instalado otro compilador 
MSVC++ ni runtime, ya que sino py2exe parece confundirse y los ejecutables 
(.exe/.dll) van a tener otro manifest (o a veces ninguno), lo que luego causa 
error al ejecutarlo.

Para extraer el manifest embebido en los .exe/.dll y poder compararlo, ejecutar:

C:\PYTHON27>"c:\Program Files\Windows Kits\8.1\bin\x86\mt.exe"
            -inputresource:python.exe -out:extraced.manifest

MT.exe (Manifest Tool) está incluido en los SDK de Windows, para 8.1 ver:

https://msdn.microsoft.com/es-es/windows/desktop/bg162891.aspx

NOTA: los DLL y el manifest se pueden tomar de Mercurial, pero el cliente 
Dropbox para Windows también los incluyen. 

Original comment by reingart@gmail.com on 23 Jan 2015 at 9:05

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
AGREGO: aparte del CRT, haría falta también los redistribuibles del MFC para 
las aplicaciones visuales (PyRece, PyFactura). Están incluidos con pywin32 y 
el setup.py los copia automáticamente en esos casos.

Para los cambios en el código fuente, ver: r7579853d3c3f (vcredist.exe), 
rb05d8646a7a4 (SxS), r44fd999e529f

Original comment by reingart@gmail.com on 23 Jan 2015 at 9:44