From: Pedro A. a. s. <uf...@uf...> - 2008-12-19 23:41:29
|
While trying to make a standalone windows executable for Babel[1], I've stumbled upon a problem. Babel uses some pickled *.dat files from inside it's module tree, which don't initially get included by py2exe. I've been able to override that with the data_files option, however, when trying to use the resulting executable I get the following error: WindowsError: [Error 3] The system cannot find the path specified: 'C:\\Documents and Settings\\Win2K1\\My Documents\\Projects\\Babel\\dist\\pybabel.exe\\babel\\localedata/*.*' The line of the problematic code is this[2] one. Babel uses os.path.dirname(__file__) to get the module's path which from there we can know where the data files are. How can I make this work? [1] - http://babel.edgewall.org/ [2] - http://babel.edgewall.org/browser/trunk/babel/localedata.py#L56 -- Pedro Algarvio __ ___ ___ _______ ___ __ | Y .' _| _ .-----.' _| |_ .-----.----.-----. |. | | _| 1___| _ | _| _|__| _ | _| _ | |. | |__| |____ |_____|__| |____|__|_____|__| |___ | |: 1 | |: 1 | |_____| |::.. . | |::.. . | ufs [AT] ufsoft [DOT] org `-------' `-------' ufs [AT] sapo [DOT] pt |
From: Daniel P. <da...@pr...> - 2008-12-20 00:18:57
|
I think the canonical answer is: Don't bundle that package into the executable (don't use bundle_files) and use an installer program to deploy your project instead of just deploying a single executable. Here's an example of one way to do this: http://www.py2exe.org/index.cgi/SingleFileExecutable - Daniel. Pedro Algarvio, aka, s0undt3ch wrote: > While trying to make a standalone windows executable for Babel[1], > I've stumbled upon a problem. > > Babel uses some pickled *.dat files from inside it's module tree, > which don't initially get included by py2exe. I've been able to > override that with the data_files option, however, when trying > to use the resulting executable I get the following error: > > WindowsError: [Error 3] The system cannot find the path specified: > 'C:\\Documents and Settings\\Win2K1\\My Documents\\Projects\\Babel\\dist\\pybabel.exe\\babel\\localedata/*.*' > > The line of the problematic code is this[2] one. > Babel uses os.path.dirname(__file__) to get the module's > path which from there we can know where the data files > are. > > How can I make this work? > > [1] - http://babel.edgewall.org/ > [2] - http://babel.edgewall.org/browser/trunk/babel/localedata.py#L56 |
From: Samuel L. <sam...@au...> - 2008-12-22 19:09:36
|
> I think the canonical answer is: Don't bundle that package > into the executable (don't use bundle_files) and use an > installer program to deploy your project instead of just > deploying a single executable. I used information from http://www.py2exe.org/index.cgi/ConfigImportProblems to read from the zip. My solution looked like: if not vars().has_key('__loader__'): scriptlet_list = glob.glob(os.path.join(__path__[0],'*scriptlet.py')) else: zipfiles = __loader__._files scriptlet_list = [zipfiles[file][0] for file in zipfiles.keys() \ if 'scriptlets' in file] Basically look through the file list in the zip importer for files that include the folder name scriptlets (I should have added a / now that I look at it) and add them to the list. This snippet is for an __all__ set in an __init__.py. > > The line of the problematic code is this[2] one. > > Babel uses os.path.dirname(__file__) to get the module's path which > > from there we can know where the data files are. > > > > How can I make this work? > > > > [1] - http://babel.edgewall.org/ > > [2] - > http://babel.edgewall.org/browser/trunk/babel/localedata.py#L56 So in your case you would have to change the list, exists and load functions to understand / use the ziploader stuff. Don't know if that helps. Or is useful for your situation. Sam |