[PEAK] Packaging peak apps
Phillip J. Eby
pje at telecommunity.com
Tue Sep 28 11:18:16 EDT 2004
At 10:31 AM 9/28/04 +0200, Roché Compaan wrote:
>Phillip J. Eby wrote:
>>At 10:43 AM 9/27/04 +0200, Roché Compaan wrote:
>>>Basically the peak script:
>>>from peak.running import commands
>>>commands.runMain( commands.Bootstrap )
>>>I am building an exe from run.py with py2exe for testing purposes. I end
>>>up with run.exe. I get the traceback when calling run.exe from the
>>And this is with an up-to-date CVS version of PEAK? And
>>'peak/binding/__init__.py' and 'peak/binding/interfaces.py' are in the
>>zipfile bound to run.exe?
>>Better yet... can you give me a location to download your run.exe so I
>>can investigate? Thanks.
>Attached is a zip of the whole "dist" directory, containing library.zip
As far as I can tell, the issues are caused by the lack of reloading
support for zipfiles, coupled with the absence of various required modules
from library.zip. (For example, library.zip doesn't contain
peak.binding.api, so that doesn't work.)
Also note that even if your script got to the second line, it would then
run afoul of the fact that 'config.fileNearModule()' will be broken when
the modules are in a zipfile.
Really, to run from a zipfile, you not only need the currently non-existent
Python 2.3.5, but also a version of PEAK that doesn't use fileNearModule()
in its present form.
My recommendation to you is to try using the procedure at:
but simply delete the .py files to obfuscate the source.
If you can't use this approach, you might try having your application
extract library.zip to a library directory (if it isn't already), and then
replace 'library.zip' in sys.path with the name of the library directory
before doing any other imports. This isn't perfect, but it might do the
trick if you don't want to build your own executable as described on the Wiki.
It would certainly be nice, though, to be able to run PEAK applications
(and PEAK itself) from zip files, so I do intend to get the
fileNearModule() stuff revised for PEP 302 compatibility. But it will be
moot until 2.3.5 and/or 2.4 are available, because correct operation of
reload() is a must for PEAK's own modules, at a minimum.
More information about the PEAK