Obtener PyInstaller para importar Basemap

Estoy trabajando en la creación de un ejecutable independiente para una herramienta simple que construí que usa un mapa base. (Usando Python 2.7, usando la versión dev de PyInstaller – 2.1). El .exe (archivo único) se comstack bien, pero cuando se ejecuta, aparece el siguiente error:

Traceback : File "", line 9, in  File "c:\python27\lib\site-packages\PyInstaller-2.1dev_-py2.7.egg\PyInstaller\loader\pyi_importers.py", line 270, in load_module exec File "C:\Documents and Settings\MYNAME\Python code\Flood\src\root\nested\build\FloodRisk\out00-PYZ.pyz\mpl_toolkits.basemap", line 30, in  File "c:\python27\lib\site-packages\PyInstaller-2.1dev_-py2.7.egg\PyInstaller\loader\pyi_importers.py", in load_module exec File "C:\Documents and Settings\MYNAME\My Documents\Python code\Flood\src\root\nested\build\FloodRisk\out00-PYZ.pyz\mpl_toolkits.basemap.pyproj", line 242, in  IOError: proj data directory not found. Expecting it at: C:\DOCUME~1\MYNAME\LOCALS~1\Temp\_MEI68362\mpl_toolkits\basemap\data 

¿Alguien ha tenido suerte al hacer que el mapa base se cargue correctamente en un único archivo .exe creado con PyInstaller? Estoy construyendo usando un archivo por lotes muy simple:

 C:\Python27\python.exe "C:\Python27\Lib\site-packages\pyinstaller-develop\PyInstaller\main.py" --onefile "C:\Documents and Settings\MYNAME\My Documents\Python code\Flood\src\root\nested\FloodRisk.py" pause 

¡Gracias!

Me tomó unos días, pero creo que lo solucioné después de juntar algunas soluciones parciales:

Desde http://www.jontrinder.com/blog/?paged=2 :

En pyproj.py, que se encuentra en C: … \ Lib \ site-packages \ mpl_toolkits \ basemap Justo después de las enormes listas hay una línea que se parece a algo como

 pyproj_datadir = os.sep.join([os.path.dirname(__file__), 'data']) 

Reemplace eso con

 if 'PROJ_DIR' in os.environ: pyproj_datadir = os.environ['PROJ_DIR'] else: pyproj_datadir = os.sep.join([os.path.dirname(__file__), 'data']) 

La pieza que faltaba en la solución vinculada estaba agregando la ruta de datos cuando en realidad ejecutaba PyInstaller con –paths

 C:\Python27\python.exe "C:\Python27\Lib\site-packages\pyinstaller-develop\PyInstaller\main.py" --onefile --paths="C:\Python27\Lib\site-packages\mpl_toolkits\*" "C:\Documents and Settings\KAHERE\My Documents\Python code\Flood\src\root\nested\FloodRisk.py" pause 

Solo pensé en publicar en caso de que alguien más se estuviera golpeando la cabeza en este caso.

Todo lo que necesita hacer es decirle a PyInstaller que agregue los datos del mapa base a la distribución. Aquí hay un código de ejemplo. Suponiendo que tiene un archivo orto.py en el directorio E: \ scratch, coloque el siguiente orto.spec en el mismo directorio y ejecútelo

 PyInstaller -y ortho.spec 

Aquí está ortho.spec:

 a = Analysis(['ortho.py'], pathex=['E:\\scratch'], hiddenimports=[], hookspath=None, runtime_hooks=None) pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, exclude_binaries=True, name='ortho.exe', debug=False, strip=None, upx=True, console=True ) import mpl_toolkits.basemap import os src_basedata = os.path.join(mpl_toolkits.basemap.__path__[0], "data") tgt_basedata = os.path.join('mpl_toolkits', 'basemap', 'data') coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas + Tree(src_basedata, prefix=tgt_basedata), strip=None, upx=True, name='ortho')