From: Robert <kxr...@go...> - 2009-06-17 19:01:15
|
I searched the web and here. Bits, but still confused, or more confused about the official/correct/best way to distribute py26 binary win apps. No complete working description found. When copying the msvcr90.dll (and when to use msvcp90.dll too?) next to the .exe , it doesn't simply run on a machine without Python/MSVCRT9-SxS , but just says "app cannot be started". Also when I created a app.exe.manifest (in various ways). * What ingredients are needed for multi-win-distribution 98..XP..Vista/3000 ? * What must be in the app.exe.manifest - or can this be included inside the .exe with other_resources ? * Where to put the things? Must I / the installer create & setup those complicated dirs in \windows\winSxS\... ? register something? * Or can the Dlls and manifest(s) be all put local? Or can they still be all put even inside a single-file exe (py2exe/bundle_files) - so that I have a real singe-file solution ? (often I like to e-mail quickscripted singlefile commandline tools without worrying about dirs) * What is the exact news with Vista vs XP? (I have no frequent access to Vista currently, but the apps shall run on Vista) * can the python.exe / app.exe , dlls modified or whatever to overcome/switch off this SxS / UAC chaos at all ? ( Bills Developers seem to have nothing anymore productive to do but to complicate things and self-create problems for the world ... circular world-wide self-occupation ? ) Robert PS: * can py26 (py3), (numpy, wx, win32all/ui, PIL, py2exe, ...) be successfully compiled with MingW all against standard msvcrt.dll which is pre-given on any Windows - and no extra DLLs and SxS at all? No MS compiler involved anymore ? |
From: Werner F. B. <wer...@fr...> - 2009-06-17 20:44:17
|
Robert, Robert wrote: > I searched the web and here. Bits, but still confused, or more > confused about the official/correct/best way to distribute py26 > binary win apps. No complete working description found. > > When copying the msvcr90.dll (and when to use msvcp90.dll too?) > next to the .exe , it doesn't simply run on a machine without > Python/MSVCRT9-SxS , but just says "app cannot be started". Also > when I created a app.exe.manifest (in various ways). I did a bit of testing on this and documented it on the wxPython wiki - note this is still work in progress and anyone chipping in is very welcome. http://wiki.wxpython.org/Deployment > > * What ingredients are needed for multi-win-distribution > 98..XP..Vista/3000 ? > > * What must be in the app.exe.manifest - or can this be included > inside the .exe with other_resources ? > > * Where to put the things? Must I / the installer create & setup > those complicated dirs in \windows\winSxS\... ? register something? Assuming a local install (i.e. within the app folder you need the manifest, and if you use zip for library stuff then you need it twice. > > * Or can the Dlls and manifest(s) be all put local? see above Or can they > still be all put even inside a single-file exe anything but bundle = 3 has not worked or I did not test (IMHO it is just not worse the hassle as I always do an installer using InnoSetup). > (py2exe/bundle_files) - so that I have a real singe-file solution > ? (often I like to e-mail quickscripted singlefile commandline > tools without worrying about dirs) > > * What is the exact news with Vista vs XP? (I have no frequent > access to Vista currently, but the apps shall run on Vista) I have MS 2k, XP, Vista and Seven and what I documented on the wiki worked for me, i.e. created/deved on Vista and been able to install and run on all the others (either just running from the "dist" folder and/or installing it using the InnoSetup installer script shown on the same wiki. > > * can the python.exe / app.exe , dlls modified or whatever to > overcome/switch off this SxS / UAC chaos at all ? ( Bills > Developers seem to have nothing anymore productive to do but to > complicate things and self-create problems for the world ... > circular world-wide self-occupation ? ) I guess it is assuring that un-employment in the MS region stays low:). Werner |
From: Daniel P. <da...@pr...> - 2009-06-17 23:35:03
|
Robert wrote: > * can py26 (py3), (numpy, wx, win32all/ui, PIL, py2exe, ...) be > successfully compiled with MingW all against standard msvcrt.dll > which is pre-given on any Windows - and no extra DLLs and SxS at > all? No MS compiler involved anymore ? I don't know that anyone's tried it. Assuming it doesn't violate license restrictions, you can use a Python compiled against Cygwin. This will depend on cygwin1.dll and potentially other Cygwin DLLs, but as far as I know cygwin1.dll doesn't require SxS, manifests, or any of that mess. IANAL, but I believe as long as you only use GPL or GPL-compatible extension modules, you can distribute a Python linked against Cygwin without having to license all your code under the GPL. However, using a Cygwin runtime means that win32all and friends aren't likely to work. And, of course, py2exe probably won't work with it either. If you really want to try building with MinGW, it might be easiest to install Cygwin and use the Cygwin environment, while just using the compilers from MinGW. That way you ought to be able to use the standard autoconf/makefile setup and just tweak it to build with the MinGW compilers. Some heavy GCC magic may be required here (Python's build process is very finicky about how you select compiler options, especially in cross-compile situations), but I'd be interested to hear your results if you try it. On the flip side, you could embrace the Microsoft compilers and go with a .NET solution, possibly using IronPython. I haven't played with it too much, but my understanding is that IronPython compiles Python code directly to MSIL, so it should be possible to build an executable that looks to Windows like it might as well have come from C# or VB.NET. Again, win32all and friends aren't available (and neither are numpy, wx, or PIL) but you do get the .NET standard library instead, which covers a lot of the same functionality. Again, py2exe probably isn't an option there either. YMMV. My solution for the time being is to just keep all my projects in Python 2.5. 2.6 adds some nice features, but there isn't any "killer feature" that has made it impossible for me to get things done in 2.5. I suppose eventually I'll have to bite the bullet and move to 3.x, but I'm not in any hurry to go down that path either... hopefully by the time the community starts to migrate en masse to Py3k, the compile issues on Windows will have all been sorted out. I won't hold my breath, though. - Daniel. |
From: Mark H. <ski...@gm...> - 2009-06-18 02:10:00
|
On 18/06/2009 4:57 AM, Robert wrote: > I searched the web and here. Bits, but still confused, or more > confused about the official/correct/best way to distribute py26 > binary win apps. No complete working description found. > > When copying the msvcr90.dll (and when to use msvcp90.dll too?) > next to the .exe , it doesn't simply run on a machine without > Python/MSVCRT9-SxS , but just says "app cannot be started". Also > when I created a app.exe.manifest (in various ways). You need to copy the msvcrt .manifest file, plus all .dlls referenced in that manifest, used or not. > * What ingredients are needed for multi-win-distribution > 98..XP..Vista/3000 ? Win2k and later should be fine. > * What must be in the app.exe.manifest - or can this be included > inside the .exe with other_resources ? Assuming you have the most recent 2.6 build, you should find py2exe takes care of the .exe's manifest for you. You can use a manifest tool to confirm this. > * Where to put the things? Must I / the installer create& setup > those complicated dirs in \windows\winSxS\... ? register something? Just having the manifest directly next to the .exe should be enough (although maybe not with the 'bundle' options, nor with strange directory layouts - the defaults should be fine) > * Or can the Dlls and manifest(s) be all put local? Or can they > still be all put even inside a single-file exe > (py2exe/bundle_files) - so that I have a real singe-file solution > ? (often I like to e-mail quickscripted singlefile commandline > tools without worrying about dirs) IIRC, the py2exe generated executable itself depends on the CRT, in which case it is not possible to use bundling for these files. It *might* be possible to upgrade py2exe so this is possible (by making the py2exe stub itself not depend on the CRT, so it could expand the CRT before loading python) > * What is the exact news with Vista vs XP? (I have no frequent > access to Vista currently, but the apps shall run on Vista) No problem. The UAC entries of the manifest may offer you some problems with vista, but (a) py2exe supports overriding that and (b) a manifest tool will be able to tell you exactly what is, or is not, in any particular manifest. > * can the python.exe / app.exe , dlls modified or whatever to > overcome/switch off this SxS / UAC chaos at all ? ( Bills > Developers seem to have nothing anymore productive to do but to > complicate things and self-create problems for the world ... > circular world-wide self-occupation ? ) If you depend on the vs2008 runtime libs there is no way to avoid it other than the above (ie, by having a complete copy of the manifest next to your .exe, and a reference to that manfiest in your .exe.) Cheers, Mark |
From: Robert <kxr...@go...> - 2009-06-19 16:00:42
|
Robert wrote: > I searched the web and here. Bits, but still confused, or more > confused about the official/correct/best way to distribute py26 > binary win apps. No complete working description found. > > When copying the msvcr90.dll (and when to use msvcp90.dll too?) > next to the .exe , it doesn't simply run on a machine without > Python/MSVCRT9-SxS , but just says "app cannot be started". Also > when I created a app.exe.manifest (in various ways). > Thanks for the answers. Werner F. Bruhin wrote: > http://wiki.wxpython.org/Deployment Mark Hammond wrote: > You need to copy the msvcrt .manifest file, plus all .dlls > referenced in that manifest, used or not. To clarify/short-cut it for other Python2.6 sufferers: This means: A file 'Microsoft.VC90.CRT.manifest' has to be put next to 'msvcr90.dll' and both next to the app.exe . This is the only real surprise vs the usual former process. A app.exe.manifest is not needed (unless special dependencies, special windows control libs, ...) app.exe can still be a created with bundle_files = 1/2 The dlls are in C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375 The manifest source has a different long filename: C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest but it can (or must) be simplified as -----Microsoft.VC90.CRT.manifest--------------------------- <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- Copyright (c) Microsoft Corporation. All rights reserved. --> <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="msvcp90.dll" /> <file name="msvcm90.dll" /> </assembly> ------------------------------------------------------------ msvcp90.dll and msvcm90.dll are not needed, unless really used, which is rarely the case. tested it. (vcp needed by some wx stuff). Robert |