From: Jonathan H. <ta...@ta...> - 2010-02-05 15:32:30
|
On 05/02/2010 13:53, le dahut <le....@la...> wrote: > Date: Wed, 03 Feb 2010 10:54:15 +0100 > From: le dahut<le....@la...> > Subject: Re: [Py2exe-users] import win32ui causing problems in an exe > To: Eligio Becerra<mas...@gm...>, > py2...@li... > Message-ID:<4B6...@la...> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed > > What do you mean with "using the proper typelibs" ? > > I've found this message : > http://www.mail-archive.com/pyt...@py.../msg258188.html > This also solved my ImportError problem. > > But does this mean that I must tell users to install "Microsoft Visual > C++ 2008 Redistributable Package" before installing my app ? > Or is there a way to make py2exe copy the needed DLLs directly in the > application ? > > > Thanks. > Sorry to be a bit one-note, but a description of dependencies on MS Visual C, it's redistributable installer, and what your options are, can now be found on the py2exe wiki tutorial page: http://www.py2exe.org/index.cgi/Tutorial If you own Visual Studio (not the free 'Express Edition') then you probably have rights to bundle msvcr.dll with your application - instructions how to do that are on the wiki. If you do not own Visual Studio, then yes you must ask your users to run the redistributable installer before running your application. It is important they use the precisely correct version of the redistributable installer (ie. Visual C++ 2008 Redistributable package, the original, not SP1). Links and details are on the wiki. As an alternative, you could create an installer for your application which bundles the redistributable installer, and run that automatically when your program is installed. Best regards, Jonathan Jonathan Hartley Made of meat. http://tartley.com ta...@ta... +44 7737 062 225 twitter/skype: tartley |
From: le d. <le....@la...> - 2010-02-05 15:33:39
|
I've also tried the method described here but without any success : http://www.py2exe.org/index.cgi/Tutorial#Step52 Then I've tried several things also without success: * copy all files installed by "vcredist_x86.exe" in the python exe application directory * launching the python exe app with "Debugging Tools for Windows (x86)" * with Dependency Walker, which gave me strange messages : GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") called from "MSVCR90.DLL" at address 0x78543ACC and returned NULL. Error: La proc^Ddure sp^Dcifi^De est introuvable (127). GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") called from "MSVCR90.DLL" at address 0x78543AD9 and returned NULL. Error: La proc^Ddure sp^Dcifi^De est introuvable (127). GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") called from "MSVCR90.DLL" at address 0x78543AE6 and returned NULL. Error: La proc^Ddure sp^Dcifi^De est introuvable (127). GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") called from "MSVCR90.DLL" at address 0x78543AF3 and returned NULL. Error: La proc^Ddure sp^Dcifi^De est introuvable (127). and LoadLibraryA("u:\sources\all\dists\test_win32ui\zlib.pyd") returned NULL. Error: Le module sp^Dcifi^D est introuvable (126). LoadLibraryExA("u:\sources\all\dists\test_win32ui\win32ui.pyd", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) called from "PYTHON26.DLL" at address 0x1E0304BE. Loaded "WIN32UI.PYD" at address 0x1E280000. Successfully hooked module. LDR: LdrpWalkImportDescriptor() failed to probe u:\sources\all\dists\test_win32ui\win32ui.pyd for its manifest, ntstatus 0xc0150002 Unloaded "WIN32UI.PYD" at address 0x1E280000. LoadLibraryExA("u:\sources\all\dists\test_win32ui\win32ui.pyd", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: Cette application n'a pas pu d^Dmarrer car la configuration de l'application est incorrecte. R^Dinstaller l'application pourrait r^Dsoudre ce probl^Dme (14001). Error: The Side-by-Side configuration information for "u:\sources\all\dists\test_win32ui\WIN32UI.PYD" contains errors. Cette application n'a pas pu d^Dmarrer car la configuration de l'application est incorrecte. R^Dinstaller l'application pourrait r^Dsoudre ce probl^Dme (14001). DllMain(0x58B50000, DLL_PROCESS_DETACH, 0x00000001) in "COMCTL32.DLL" called (sorry I only have french speaking windows XPs, but I can translate those messages if needed, ask me) In pywin32 sources, I noticed that in win32ui.h there is a reference to "Microsoft.VC80.MFC", I don't know if it has any importance but it is the only file in all the sources that contains the string "vc80" (case insensitive). My application is part of a biger one that must be distributed without dependencies on any addon so I really need to be able to run an app that imports "win32ui" without having to install ""Microsoft Visual C++ 2008 Redistributable Package". Klaas le dahut wrote : > What do you mean with "using the proper typelibs" ? > > I've found this message : > http://www.mail-archive.com/pyt...@py.../msg258188.html > This also solved my ImportError problem. > > But does this mean that I must tell users to install "Microsoft Visual > C++ 2008 Redistributable Package" before installing my app ? > Or is there a way to make py2exe copy the needed DLLs directly in the > application ? > > > Thanks. > > > Eligio Becerra wrote : >> Hi: >> >> Are you using the proper typelibs? >> >> 2010/2/2 le dahut <le....@la... <mailto:le....@la...>> >> >> Did someone found a solution ? >> >> I encounter the same problem, after building an application with py2exe, >> it crashes with : >> Traceback (most recent call last): >> File "test.py", line 7, in <module> >> File "win32ui.pyo", line 12, in <module> >> File "win32ui.pyo", line 10, in __load >> ImportError: DLL load failed: >> >> >> Line 7 in test.py : >> import win32ui >> >> Versions of python stuff used : >> py2exe-0.6.9.win32-py2.6.exe >> pywin32-214.win32-py2.6.exe >> python-2.6.4.msi >> >> >> I tried to copy all mfc*.dll I found in %SYSTEM32% but without success. >> >> >> What can I try else ? >> >> >> Mark Hammond wrote : >> >> MFC42.dll is in the path when I run as a .py as well as when I >> run as an exe. >> > >> > Yeah - it might not be as simple as the DLL missing; the dialog >> you referred to before sounds more like a win32 exception dialog. >> > >> >> It doesn't seem like py2exe should have to do anything with this >> file. >> > >> > py2exe makes some attempts to locate dependent DLLs for you, and >> win32ui depends on the MFC dll. But that doesn't sound like the >> problem. >> > >> >> I ran the exe on the same system it was built on, so the dll >> >> should have been found in both cases. >> > >> > Yep - the only thing I can suggest now is executing it under a >> debugger (eg, msvc) and see if that offers a clue... >> > >> > Cheers, >> > >> > Mark >> |
From: le d. <le....@la...> - 2010-02-08 17:04:38
|
Jonathan Hartley wrote : > > On 08/02/2010 09:13, le dahut wrote: >> Jonathan, thank you for your answer; a new software problem that has >> nothing to do with computers but only with laws and people to much >> interested in their personal enrichment... >> >> >> Ok, I understand the case of "msvscr90.dll". This was the same with >> "msvscr70.dll", "msvscp70.dll" and Python2.5. >> >> >> My problem is the need of installing "Microsoft Visual C++ 2008 >> Redistributable Package". This is a dependency of "win32ui" from >> "pywin32" and I don't understand why. >> >> I know that some DLLs must be shipped with a python py2exed program >> because python uses them. But I don't understand why I have to install >> a whole M$ package just to use win32ui (which don't seem to provide >> miraculous functionalities). >> >> I would have preferred to copy some extra DLLs in my python app >> instead of installing "Microsoft VC++ 2008 Package". So I copied all >> the files provided by the MS VC++ package in my "dist" directory but >> without success. >> >> >> Can someone tell me why it didn't work ? >> Are there some registry keys to had to make Windows aware of the >> DLLs/Manifests files ? >> >> > > Hey. I see. Sorry to bang on about stuff you already knew then. :-) Oh no, don't be sorry, this was a detailed explanation. It has the merit to put things clearly on the table, which is not always obvious. > > I suspect that your DLLs must be put into a win32 assembly, which means > put into a directory named after the assembly, together with a manifest > file. The wiki tutorial describes doing this for msvcr90.dll - hopefully > your DLLs need treating similarly. Following the example of : http://www.py2exe.org/index.cgi/Tutorial#Step52 I tested it with this manifest file : <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <noInheritable/> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/> <file name="msvcr90.dll" /> <file name="atl90.dll" /> <file name="mfc90chs.dll" /> <file name="mfc90cht.dll" /> <file name="mfc90deu.dll" /> <file name="mfc90.dll" /> <file name="mfc90enu.dll" /> <file name="mfc90esn.dll" /> <file name="mfc90esp.dll" /> <file name="mfc90fra.dll" /> <file name="mfc90ita.dll" /> <file name="mfc90jpn.dll" /> <file name="mfc90kor.dll" /> <file name="mfc90u.dll" /> <file name="mfcm90.dll" /> <file name="mfcm90u.dll" /> <file name="msdia90.dll" /> <file name="msvcm90.dll" /> <file name="msvcp90.dll" /> <file name="msvcr90.dll" /> <file name="vcomp90.dll" /> </assembly> which I've put in "dist\Microsoft.VC90.CRT\" subdirectory. I still get an "ImportError: DLL load failed" message. Sorry for insisting but I really need a program that works without any addons. |
From: Jonathan H. <ta...@ta...> - 2010-02-10 19:23:07
|
On 08/02/2010 17:04, le dahut wrote: > > > Jonathan Hartley wrote : >> >> On 08/02/2010 09:13, le dahut wrote: >>> Jonathan, thank you for your answer; a new software problem that has >>> nothing to do with computers but only with laws and people to much >>> interested in their personal enrichment... >>> >>> >>> Ok, I understand the case of "msvscr90.dll". This was the same with >>> "msvscr70.dll", "msvscp70.dll" and Python2.5. >>> >>> >>> My problem is the need of installing "Microsoft Visual C++ 2008 >>> Redistributable Package". This is a dependency of "win32ui" from >>> "pywin32" and I don't understand why. >>> >>> I know that some DLLs must be shipped with a python py2exed program >>> because python uses them. But I don't understand why I have to >>> install a whole M$ package just to use win32ui (which don't seem to >>> provide miraculous functionalities). >>> >>> I would have preferred to copy some extra DLLs in my python app >>> instead of installing "Microsoft VC++ 2008 Package". So I copied all >>> the files provided by the MS VC++ package in my "dist" directory but >>> without success. >>> >>> >>> Can someone tell me why it didn't work ? >>> Are there some registry keys to had to make Windows aware of the >>> DLLs/Manifests files ? >>> >>> >> >> Hey. I see. Sorry to bang on about stuff you already knew then. :-) > > Oh no, don't be sorry, this was a detailed explanation. It has the > merit to put things clearly on the table, which is not always obvious. > >> >> I suspect that your DLLs must be put into a win32 assembly, which >> means put into a directory named after the assembly, together with a >> manifest file. The wiki tutorial describes doing this for msvcr90.dll >> - hopefully your DLLs need treating similarly. > > Following the example of : > http://www.py2exe.org/index.cgi/Tutorial#Step52 > > I tested it with this manifest file : > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> > <noInheritable/> > <assemblyIdentity > type="win32" > name="Microsoft.VC90.CRT" > version="9.0.21022.8" > processorArchitecture="x86" > publicKeyToken="1fc8b3b9a1e18e3b"/> > <file name="msvcr90.dll" /> > <file name="atl90.dll" /> > <file name="mfc90chs.dll" /> > <file name="mfc90cht.dll" /> > <file name="mfc90deu.dll" /> > <file name="mfc90.dll" /> > <file name="mfc90enu.dll" /> > <file name="mfc90esn.dll" /> > <file name="mfc90esp.dll" /> > <file name="mfc90fra.dll" /> > <file name="mfc90ita.dll" /> > <file name="mfc90jpn.dll" /> > <file name="mfc90kor.dll" /> > <file name="mfc90u.dll" /> > <file name="mfcm90.dll" /> > <file name="mfcm90u.dll" /> > <file name="msdia90.dll" /> > <file name="msvcm90.dll" /> > <file name="msvcp90.dll" /> > <file name="msvcr90.dll" /> > <file name="vcomp90.dll" /> > </assembly> > > which I've put in "dist\Microsoft.VC90.CRT\" subdirectory. > > I still get an "ImportError: DLL load failed" message. > > > Sorry for insisting but I really need a program that works without any > addons. > > Hey. This probably isn't very helpful, but: Are you sure your DLL files are the same version number as the manifest file expects (ie. 9.0.21022.8) How confident are you that the other values in the manifest file are correct? ie. where did this manifest file come from? Best regards, Jonathan Jonathan Hartley Made of meat. http://tartley.com ta...@ta... +44 7737 062 225 twitter/skype: tartley |
From: le d. <le....@la...> - 2010-02-05 16:15:36
|
Jonathan Hartley wrote : > On 05/02/2010 13:53, le dahut <le....@la...> wrote: >> >> What do you mean with "using the proper typelibs" ? >> >> I've found this message : >> http://www.mail-archive.com/pyt...@py.../msg258188.html >> This also solved my ImportError problem. >> >> But does this mean that I must tell users to install "Microsoft Visual >> C++ 2008 Redistributable Package" before installing my app ? >> Or is there a way to make py2exe copy the needed DLLs directly in the >> application ? >> >> >> Thanks. >> > > Sorry to be a bit one-note, but a description of dependencies on MS > Visual C, it's redistributable installer, and what your options are, can > now be found on the py2exe wiki tutorial page: > > http://www.py2exe.org/index.cgi/Tutorial > > If you own Visual Studio (not the free 'Express Edition') then you > probably have rights to bundle msvcr.dll with your application - > instructions how to do that are on the wiki. > > If you do not own Visual Studio, then yes you must ask your users to run > the redistributable installer before running your application. It is > important they use the precisely correct version of the redistributable > installer (ie. Visual C++ 2008 Redistributable package, the original, > not SP1). Links and details are on the wiki. 1) This is for me a big step backward. With python2.5 this was not needed ! 2) where is this documented ? (I mean "if you use win32ui with py2exe you need VC redist etc... good version ... not SP1...") 3) does this apply to other modules ? (to prevent me to loose hours looking for something other people already know) |
From: Jonathan H. <ta...@ta...> - 2010-02-05 17:17:24
|
Hey there. I really sympathise. When I first understood this, I was similarly disappointed. However, the situation seems unavoidable. The py2exe project cannot fix this. The dependency on msvscr90.dll is caused by the Python interpreter having been compiled using Microsoft Visual C++. This has always been true, even back with Python 2.5. The only change in the situation is that py2exe used to assume that users had the right to distribute this DLL with their application, and hence supplied the DLL in your dist directory for you. I don't know the history behind the decision to stop doing this, but perhaps py2exe realised they do not have the right to distribute, or that it was deemed wrong to assume that all their users have the right to distribute. (after all, this would make it very easy for py2exe users to unknowingly break the law, simply by distributing the output from py2exe.) I'm no expert, but to answer your specific questions, best as I can: 1) I hesitate to say this, because it sounds terribly unhelpful, but it really only looks like a step backwards. When viewed from a certain angle, nothing has really changed since Python 2.5. Users of py2exe who DO have the right to distribute are not substantially affected: They can replacing the missing DLL in the dist directory, using a copy from their install of Visual Studio. And users who do not have the right to distribute are also not substantially affected. Although py2exe used to produce an output that worked for them, it was not legal for them to distribute it. 2) I couldn't find it documented anywhere, which is why I wrote up my findings on the py2exe wiki. I can appreciate that if one was used to distributing Visual C++ programs on Windows then this really must be such well-trodden ground as to be blindingly obvious. (It wasn't to me, although I now feel like it should have been. Live and learn.) 3) As I understand it, if distributing a bare-bones Python 2.6+ program, you only need the output of py2exe plus msvscr90.dll. If you use libraries from the Python stdlib, this will not change. However, if you add other 3rd party libraries, then in each case you will need to consider whether that library has any dependencies. If it does, then you will need to bundle those dependencies into your py2exe output. Hopefully, such dependencies might be easy to provide, if they don't come with the legal restrictions that msvscr90.dll does. Solutions appear to be: 1) Buy Visual Studio. It sticks in my craw that one would need to do this just to develop distributable applications in Python. 2) Don't buy Visual Studio, but say you did. Surprisingly effective. Obviously I imagine that the py2exe project, with which I have zero affiliation, would condemn this in the strongest possible terms. 3) Could Python for Windows be compiled using a different compiler? One that had a freely-distributable runtime? I don't know. 4) Persuade Microsoft to either grant everybody right to redistribute the required DLL files, or else to push out the DLL files over Windows Update. Best regards, Jonathan Jonathan Hartley Made of meat. http://tartley.com ta...@ta... +44 7737 062 225 twitter/skype: tartley On 05/02/2010 16:15, le dahut wrote: > > > Jonathan Hartley wrote : >> On 05/02/2010 13:53, le dahut <le....@la...> wrote: >>> >>> What do you mean with "using the proper typelibs" ? >>> >>> I've found this message : >>> http://www.mail-archive.com/pyt...@py.../msg258188.html >>> This also solved my ImportError problem. >>> >>> But does this mean that I must tell users to install "Microsoft Visual >>> C++ 2008 Redistributable Package" before installing my app ? >>> Or is there a way to make py2exe copy the needed DLLs directly in the >>> application ? >>> >>> >>> Thanks. >> >> Sorry to be a bit one-note, but a description of dependencies on MS >> Visual C, it's redistributable installer, and what your options are, >> can now be found on the py2exe wiki tutorial page: >> >> http://www.py2exe.org/index.cgi/Tutorial >> >> If you own Visual Studio (not the free 'Express Edition') then you >> probably have rights to bundle msvcr.dll with your application - >> instructions how to do that are on the wiki. >> >> If you do not own Visual Studio, then yes you must ask your users to >> run the redistributable installer before running your application. It >> is important they use the precisely correct version of the >> redistributable installer (ie. Visual C++ 2008 Redistributable >> package, the original, not SP1). Links and details are on the wiki. > > > 1) This is for me a big step backward. With python2.5 this was not > needed ! > > 2) where is this documented ? (I mean "if you use win32ui with py2exe > you need VC redist etc... good version ... not SP1...") > > 3) does this apply to other modules ? (to prevent me to loose hours > looking for something other people already know) > |
From: le d. <le....@la...> - 2010-02-08 09:13:48
|
Jonathan, thank you for your answer; a new software problem that has nothing to do with computers but only with laws and people to much interested in their personal enrichment... Ok, I understand the case of "msvscr90.dll". This was the same with "msvscr70.dll", "msvscp70.dll" and Python2.5. My problem is the need of installing "Microsoft Visual C++ 2008 Redistributable Package". This is a dependency of "win32ui" from "pywin32" and I don't understand why. I know that some DLLs must be shipped with a python py2exed program because python uses them. But I don't understand why I have to install a whole M$ package just to use win32ui (which don't seem to provide miraculous functionalities). I would have preferred to copy some extra DLLs in my python app instead of installing "Microsoft VC++ 2008 Package". So I copied all the files provided by the MS VC++ package in my "dist" directory but without success. Can someone tell me why it didn't work ? Are there some registry keys to had to make Windows aware of the DLLs/Manifests files ? Jonathan Hartley wrote : > > Hey there. > > I really sympathise. When I first understood this, I was similarly > disappointed. However, the situation seems unavoidable. > > The py2exe project cannot fix this. The dependency on msvscr90.dll is > caused by the Python interpreter having been compiled using Microsoft > Visual C++. This has always been true, even back with Python 2.5. The > only change in the situation is that py2exe used to assume that users > had the right to distribute this DLL with their application, and hence > supplied the DLL in your dist directory for you. I don't know the > history behind the decision to stop doing this, but perhaps py2exe > realised they do not have the right to distribute, or that it was deemed > wrong to assume that all their users have the right to distribute. > (after all, this would make it very easy for py2exe users to unknowingly > break the law, simply by distributing the output from py2exe.) > > I'm no expert, but to answer your specific questions, best as I can: > > 1) I hesitate to say this, because it sounds terribly unhelpful, but it > really only looks like a step backwards. When viewed from a certain > angle, nothing has really changed since Python 2.5. Users of py2exe who > DO have the right to distribute are not substantially affected: They can > replacing the missing DLL in the dist directory, using a copy from their > install of Visual Studio. And users who do not have the right to > distribute are also not substantially affected. Although py2exe used to > produce an output that worked for them, it was not legal for them to > distribute it. > > 2) I couldn't find it documented anywhere, which is why I wrote up my > findings on the py2exe wiki. I can appreciate that if one was used to > distributing Visual C++ programs on Windows then this really must be > such well-trodden ground as to be blindingly obvious. (It wasn't to me, > although I now feel like it should have been. Live and learn.) > > 3) As I understand it, if distributing a bare-bones Python 2.6+ program, > you only need the output of py2exe plus msvscr90.dll. If you use > libraries from the Python stdlib, this will not change. However, if you > add other 3rd party libraries, then in each case you will need to > consider whether that library has any dependencies. If it does, then you > will need to bundle those dependencies into your py2exe output. > Hopefully, such dependencies might be easy to provide, if they don't > come with the legal restrictions that msvscr90.dll does. > > > Solutions appear to be: > 1) Buy Visual Studio. It sticks in my craw that one would need to do > this just to develop distributable applications in Python. > 2) Don't buy Visual Studio, but say you did. Surprisingly effective. > Obviously I imagine that the py2exe project, with which I have zero > affiliation, would condemn this in the strongest possible terms. > 3) Could Python for Windows be compiled using a different compiler? One > that had a freely-distributable runtime? I don't know. > 4) Persuade Microsoft to either grant everybody right to redistribute > the required DLL files, or else to push out the DLL files over Windows > Update. > > Best regards, > > Jonathan > > Jonathan Hartley Made of meat. http://tartley.com > ta...@ta... +44 7737 062 225 twitter/skype: tartley > > > > On 05/02/2010 16:15, le dahut wrote: >> >> >> Jonathan Hartley wrote : >>> On 05/02/2010 13:53, le dahut <le....@la...> wrote: >>>> >>>> What do you mean with "using the proper typelibs" ? >>>> >>>> I've found this message : >>>> http://www.mail-archive.com/pyt...@py.../msg258188.html >>>> This also solved my ImportError problem. >>>> >>>> But does this mean that I must tell users to install "Microsoft Visual >>>> C++ 2008 Redistributable Package" before installing my app ? >>>> Or is there a way to make py2exe copy the needed DLLs directly in the >>>> application ? >>>> >>>> >>>> Thanks. >>> >>> Sorry to be a bit one-note, but a description of dependencies on MS >>> Visual C, it's redistributable installer, and what your options are, >>> can now be found on the py2exe wiki tutorial page: >>> >>> http://www.py2exe.org/index.cgi/Tutorial >>> >>> If you own Visual Studio (not the free 'Express Edition') then you >>> probably have rights to bundle msvcr.dll with your application - >>> instructions how to do that are on the wiki. >>> >>> If you do not own Visual Studio, then yes you must ask your users to >>> run the redistributable installer before running your application. It >>> is important they use the precisely correct version of the >>> redistributable installer (ie. Visual C++ 2008 Redistributable >>> package, the original, not SP1). Links and details are on the wiki. >> >> >> 1) This is for me a big step backward. With python2.5 this was not >> needed ! >> >> 2) where is this documented ? (I mean "if you use win32ui with py2exe >> you need VC redist etc... good version ... not SP1...") >> >> 3) does this apply to other modules ? (to prevent me to loose hours >> looking for something other people already know) >> > > |
From: Werner F. B. <wer...@fr...> - 2010-02-08 11:03:28
|
On 08/02/2010 10:13, le dahut wrote: > Jonathan, thank you for your answer; a new software problem that has > nothing to do with computers but only with laws and people to much > interested in their personal enrichment... > > > Ok, I understand the case of "msvscr90.dll". This was the same with > "msvscr70.dll", "msvscp70.dll" and Python2.5. > > > My problem is the need of installing "Microsoft Visual C++ 2008 > Redistributable Package". This is a dependency of "win32ui" from > "pywin32" and I don't understand why. Because Python 2.6+ and wxPython etc are dependent on this package. IIRC it just includes the x90.dll's you mention above. Here is another wiki page showing how one can create a py2exe'd version using Python 2.6.x. Werner |
From: Werner F. B. <wer...@fr...> - 2010-02-11 08:20:13
|
On 08/02/2010 11:47, Werner F. Bruhin wrote: > On 08/02/2010 10:13, le dahut wrote: >> Jonathan, thank you for your answer; a new software problem that has >> nothing to do with computers but only with laws and people to much >> interested in their personal enrichment... >> >> >> Ok, I understand the case of "msvscr90.dll". This was the same with >> "msvscr70.dll", "msvscp70.dll" and Python2.5. >> >> >> My problem is the need of installing "Microsoft Visual C++ 2008 >> Redistributable Package". This is a dependency of "win32ui" from >> "pywin32" and I don't understand why. > Because Python 2.6+ and wxPython etc are dependent on this package. > IIRC it just includes the x90.dll's you mention above. > > Here is another wiki page showing how one can create a py2exe'd version > using Python 2.6.x. It would help to give the link: http://wiki.wxpython.org/py2exe Try it with just the sample script, then adapt it to your application. I use this on Win 7 (French) and can run it on Win XP, Win Vista (both english) without any problems. I also only need msvcm90, msvcp90 and msvcr90. Why do you think you need the language specific versions? If above does not work provide a small application script and the setup.py you are using so we can play with it. Werner |
From: le d. <le....@la...> - 2010-02-11 10:18:43
Attachments:
test_win32ui.zip
|
Werner F. Bruhin wrote : > On 08/02/2010 11:47, Werner F. Bruhin wrote: >> On 08/02/2010 10:13, le dahut wrote: >>> Jonathan, thank you for your answer; a new software problem that has >>> nothing to do with computers but only with laws and people to much >>> interested in their personal enrichment... >>> >>> >>> Ok, I understand the case of "msvscr90.dll". This was the same with >>> "msvscr70.dll", "msvscp70.dll" and Python2.5. >>> >>> >>> My problem is the need of installing "Microsoft Visual C++ 2008 >>> Redistributable Package". This is a dependency of "win32ui" from >>> "pywin32" and I don't understand why. >> Because Python 2.6+ and wxPython etc are dependent on this package. >> IIRC it just includes the x90.dll's you mention above. >> >> Here is another wiki page showing how one can create a py2exe'd version >> using Python 2.6.x. > It would help to give the link: > http://wiki.wxpython.org/py2exe > > Try it with just the sample script, then adapt it to your application. > I use this on Win 7 (French) and can run it on Win XP, Win Vista (both > english) without any problems. > > I also only need msvcm90, msvcp90 and msvcr90. > > Why do you think you need the language specific versions? > > If above does not work provide a small application script and the > setup.py you are using so we can play with it. > > Werner > > The example on your link is approximatively what I did. To be sure, I've restarted from scratch but without more success. I've joined an archive with : * a very simple program that crashes and its setup.py * the microsoft.VC90.CRT.manifest file * md5sums of the dlls files so people can be sure I use the good versions I hope this helps. |
From: Werner F. B. <wer...@fr...> - 2010-02-11 11:24:21
Attachments:
setup.py
|
On 11/02/2010 11:18, le dahut wrote: ... > > The example on your link is approximatively what I did. To be sure, I've > restarted from scratch but without more success. > > I've joined an archive with : > * a very simple program that crashes and its setup.py > * the microsoft.VC90.CRT.manifest file > * md5sums of the dlls files so people can be sure I use the good versions > > > I hope this helps. Attached setup.py which is like the one shown on the wiki page plus it generates a console app and it works for me. I.e. running the generated "test_win32ui_con.exe" from a windows command prompt shows "ok" (btw, I needed to change the sample script to do print "ok", i.e. use a string and not a variable). This is on Windows 7 with Py2.6.3 Werner |
From: le d. <le....@la...> - 2010-02-11 14:53:48
|
Werner F. Bruhin wrote : > On 11/02/2010 11:18, le dahut wrote: > > ... >> >> The example on your link is approximatively what I did. To be sure, I've >> restarted from scratch but without more success. >> >> I've joined an archive with : >> * a very simple program that crashes and its setup.py >> * the microsoft.VC90.CRT.manifest file >> * md5sums of the dlls files so people can be sure I use the good versions >> >> >> I hope this helps. > Attached setup.py which is like the one shown on the wiki page plus it > generates a console app and it works for me. I've changed "print ok" to "print 'ok'" (shame on me !). In your setup.py I've only modified : < py26MSdll = glob.glob(r"d:\dev\Py26MSdlls\*.*") --- > py26MSdll = glob.glob(r"U:\sources\all\Py26dlls\*.*") The directory contains : * Microsoft.VC90.CRT.manifest * msvcm90.dll * msvcp90.dll * msvcr90.dll Do you have the same files ? On the machine with "MS VC++ 2008 Redist Package" "test_win32ui_con.exe" runs fine and print "ok" on the console On the machine without "MS VC++ 2008 Redist Package" "test_win32ui_con.exe" exits with error : """ U:\sources\all>dist\test_win32ui_con.exe Traceback (most recent call last): File "test_win32ui.py", line 5, in <module> import win32ui File "win32ui.pyo", line 12, in <module> File "win32ui.pyo", line 10, in __load ImportError: DLL load failed: Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. Réinstaller l'application pourrait résoudre ce problème. """ To be sure, I compiled 2 times : * one on a Win XP machine with "MS VC++ 2008 Redist Package" * one on a Win XP machine without both using : * python 2.6.4 * pywin32-214 * py2exe-0.6.9 * wxpython 2.8.10.1 (unicode) Do you have also |
From: Werner F. B. <wer...@fr...> - 2010-02-11 17:23:23
Attachments:
setup.py
|
Hi, On 11/02/2010 15:53, le dahut wrote: > ... > > On the machine without "MS VC++ 2008 Redist Package" > "test_win32ui_con.exe" exits with error : > """ > U:\sources\all>dist\test_win32ui_con.exe > Traceback (most recent call last): > File "test_win32ui.py", line 5, in<module> > import win32ui > File "win32ui.pyo", line 12, in<module> > File "win32ui.pyo", line 10, in __load > ImportError: DLL load failed: Cette application n'a pas pu démarrer car > la configuration de l'application est incorrecte. Réinstaller > l'application pourrait résoudre ce problème. > """ > I did some more checking on a second machine and run into the same problem as you. I then checked with just my wxPython script and that worked fine. So, started to compare the two dist folders and used "DependecyWalker" to see what dll is causing the problem, that pointed at "dwmapi.dll", but even copying this didn't fix it. Reviewed other answers in this thread and looking at Mark's answer the penny dropped, it is not msvc* which is causing the problem, but it is msfc*. So, the fix I came up is attached. Basically I changed these lines: py26MSVCdll = glob.glob(r"d:\dev\Py26MSdlls\msvc\*.*") py26MSFCdll = glob.glob(r"d:\dev\Py26MSdlls\msfc\*.*") # following works from Windows XP + # if you need to deploy to older MS Win versions then I found that on Win2K # it will also work if the files are put into the application folder without # using a sub-folder. data_files += [("Microsoft.VC90.CRT", py26MSVCdll), ("lib\Microsoft.VC90.CRT", py26MSVCdll), ("Microsoft.VC90.MFC", py26MSFCdll), ("lib\Microsoft.VC90.MFC", py26MSFCdll), ] Above might be overkill, you need to try out if you only need one copy of these dll's, which btw I found in "C:\Python26\Lib\site-packages\pythonwin" Hope this helps Werner |
From: le d. <le....@la...> - 2010-02-12 10:57:29
|
Werner F. Bruhin wrote : > Hi, > > On 11/02/2010 15:53, le dahut wrote: >> > ... >> >> On the machine without "MS VC++ 2008 Redist Package" >> "test_win32ui_con.exe" exits with error : >> """ >> U:\sources\all>dist\test_win32ui_con.exe >> Traceback (most recent call last): >> File "test_win32ui.py", line 5, in<module> >> import win32ui >> File "win32ui.pyo", line 12, in<module> >> File "win32ui.pyo", line 10, in __load >> ImportError: DLL load failed: Cette application n'a pas pu démarrer car >> la configuration de l'application est incorrecte. Réinstaller >> l'application pourrait résoudre ce problème. >> """ >> > I did some more checking on a second machine and run into the same > problem as you. I then checked with just my wxPython script and that > worked fine. So, started to compare the two dist folders and used > "DependecyWalker" to see what dll is causing the problem, that pointed > at "dwmapi.dll", but even copying this didn't fix it. > > Reviewed other answers in this thread and looking at Mark's answer the > penny dropped, it is not msvc* which is causing the problem, but it is > msfc*. > > So, the fix I came up is attached. > > Basically I changed these lines: > > py26MSVCdll = glob.glob(r"d:\dev\Py26MSdlls\msvc\*.*") > py26MSFCdll = glob.glob(r"d:\dev\Py26MSdlls\msfc\*.*") > > # following works from Windows XP + > # if you need to deploy to older MS Win versions then I found that on Win2K > # it will also work if the files are put into the application folder > without > # using a sub-folder. > data_files += [("Microsoft.VC90.CRT", py26MSVCdll), > ("lib\Microsoft.VC90.CRT", py26MSVCdll), > ("Microsoft.VC90.MFC", py26MSFCdll), > ("lib\Microsoft.VC90.MFC", py26MSFCdll), > ] > > Above might be overkill, you need to try out if you only need one copy > of these dll's, which btw I found in > "C:\Python26\Lib\site-packages\pythonwin" > > Hope this helps > Werner Werner, this was *very* helpful ! It works fine now. I also tried Dependency Walker and I didn't understand how to interpret it, so thank you very much for your clarification. After some tests, I see that my test app works with only : * mfc90.dll * Microsoft.VC90.MFC.manifest Other mfc*.dll and msv*.dll are not necessary. Can I conclude that I don't need to redistribute them or can the application fail to run on other machines ? At particular python calls ? Maybe this could be documented somewhere on http://www.py2exe.org/ ? I've subsidiary question : in setup.py, why do you define a "Target" class ? Why don't you use dict() ? Like : GUI2Exe_Target_1con = dict( script = "test_win32ui.py", icon_resources = icon_resources, ..., ) Klaas |
From: Werner F. B. <wer...@fr...> - 2010-02-12 11:50:43
|
Hi, On 12/02/2010 11:57, le dahut wrote: ... > > Werner, this was *very* helpful ! > > It works fine now. > > I also tried Dependency Walker and I didn't understand how to interpret > it, so thank you very much for your clarification. I still have a hard time with it too. > > After some tests, I see that my test app works with only : > * mfc90.dll > * Microsoft.VC90.MFC.manifest > Other mfc*.dll and msv*.dll are not necessary. > > Can I conclude that I don't need to redistribute them or can the > application fail to run on other machines ? At particular python calls ? The import test is definitely not enough, it might be that some functions will need other things. So, you will need to check your full application at least once on a machine which never saw Python or other tools you are using, i.e. only has the py2exe'd version installed. > > > Maybe this could be documented somewhere on http://www.py2exe.org/ ? It is a wiki, so everyone can document things, maybe you could create a new page below this: http://www.py2exe.org/index.cgi/WorkingWithVariousPackagesAndModules with a heading of win32ui. I don't use win32ui myself, so I don't think that I know enough about it to write up something. All my stuff is done using wxPython and I documented my findings for this on the deploy pages on the wxPython wiki. > > > > I've subsidiary question : in setup.py, why do you define a "Target" > class ? Why don't you use dict() ? > Like : > GUI2Exe_Target_1con = dict( > script = "test_win32ui.py", > icon_resources = icon_resources, > ..., > ) > To generate my initial version of a setup.py I use the gui2exe tool (http://code.google.com/p/gui2exe/), that is generating most of the code you see, only additions I made by had is the stuff for the dll's and I adjust some of the include/exclude stuff based on my needs. Werner |
From: le d. <le....@la...> - 2010-02-12 14:31:50
|
Werner F. Bruhin wrote : >> Maybe this could be documented somewhere on http://www.py2exe.org/ ? > It is a wiki, so everyone can document things, maybe you could create a > new page below this: > > http://www.py2exe.org/index.cgi/WorkingWithVariousPackagesAndModules > > with a heading of win32ui. Ok, it's done : http://www.py2exe.org/index.cgi/Py2exeAndWin32ui (maybe experts would add some informations in the "Explanation" part) Which is linked on this page : http://www.py2exe.org/index.cgi/WorkingWithVariousPackagesAndModules and here : http://www.py2exe.org/index.cgi/Tutorial#Step5211 >> I've subsidiary question : in setup.py, why do you define a "Target" >> class ? Why don't you use dict() ? >> Like : >> GUI2Exe_Target_1con = dict( >> script = "test_win32ui.py", >> icon_resources = icon_resources, >> ..., >> ) >> > To generate my initial version of a setup.py I use the gui2exe tool > (http://code.google.com/p/gui2exe/), that is generating most of the code > you see, only additions I made by had is the stuff for the dll's and I > adjust some of the include/exclude stuff based on my needs. gui2exe, interesting but don't work on a non-English windows because of images\*.* names. "File" menu in French corresponds to "Fichier" and application searches "images\Fichier.png" instead of "images\File.png". Once again, thanks for your help. |
From: Werner F. B. <wer...@fr...> - 2010-02-12 16:01:39
|
Hi, On 12/02/2010 15:31, le dahut wrote: ... > > gui2exe, interesting but don't work on a non-English windows because of > images\*.* names. > > "File" menu in French corresponds to "Fichier" and application searches > "images\Fichier.png" instead of "images\File.png". This is really OT here, maybe report this on the wxPython list, with version details and the exact traceback or error, Andrea is very fast in providing corrections. Anyhow, I run Win 7 French Edition (as it was easier to get it with my machine then asking for an English one) and don't see any problems, e.g. menu File is labeled "Fichier" etc etc, clicking on it works as far as I can see. BTW, I am running the current SVN version of gui2exe. > > > Once again, thanks for your help. You are welcome Werner |
From: Mark H. <ski...@gm...> - 2010-02-08 12:42:28
|
On 8/02/2010 1:13 AM, le dahut wrote: > Jonathan, thank you for your answer; a new software problem that has > nothing to do with computers but only with laws and people to much > interested in their personal enrichment... > > > Ok, I understand the case of "msvscr90.dll". This was the same with > "msvscr70.dll", "msvscp70.dll" and Python2.5. > > > My problem is the need of installing "Microsoft Visual C++ 2008 > Redistributable Package". This is a dependency of "win32ui" from > "pywin32" and I don't understand why. Python itself, most python extension modules and most of pywin32 all depend on the 'msvcrt*.dll' assembly. win32ui also depends on the MS MFC assembly. These are 2 distinct assemblies (although the msvc* assembly includes ~3 dlls) Note that in both cases, the dependencies with the new MS compiler now are on true 'assemblies' - not just the DLLs - and while the distinction is confusing, it is worth understanding. I expect the redist package includes *both* assemblies - but note that it *is* possible (assuming you have the legal right) to install a py2exe application which uses a local copy of both assemblies, and therefore doesn't need to use that redist package. The py2exe wiki has some details on this - if they aren't clear, let us know specifically what page you are looking at on the wiki and what isn't working, and I'll update the page accordingly... Mark |