Let Babel works with py2exeDaniele Esposti's Blog, in 29 July 2010
Babel is a framework to translate date, times, numbers and currency in all the languages of the world. Unfortunately the package is not py2exe-friendly but with a little patch we can let Babel works when is embedded with py2exe.
When you build a Windows executable with py2exe all goes fine but when you run the application and you use Babel’s method you will get an UnknownLocaleError.
Digging in the code i found the source of the problem in
localedata.py file at line 33:
_dirname = os.path.join(os.path.dirname(__file__), 'localedata')
As you can see Babel use the
__file__ module attribute to get the path of the
localedata folder but obviously it doesn’t return the correct path when Babel is embed inside an exe file by py2exe.
A simple and fast solution is to check if Babel is running in a frozen environment and thus return a different path using
import sys if hasattr( sys, 'frozen' ): _dirname = os.path.join(os.path.dirname(sys.executable), 'localedata') else: _dirname = os.path.join(os.path.dirname(__file__), 'localedata')
Now the only thing left is to add the
localedata folder to the
data_files collection in the py2exe’ setup script:
data_files = [ ...your data files... ( "localedata", glob.glob( os.path.join( os.path.dirname( babel.__file__ ), "localedata" ) ) ]
This fix is working well with Babel 0.9.5 and py2exe under Windows environment. I think it’s working wirth PyInstaller and py2app as well but I didn’t tried yet.