From: Stuart M. <Stu...@ob...> - 2012-08-27 17:58:40
|
On 8/27/2012 1:22 PM, Christoph Gohlke wrote: > On 8/27/2012 9:42 AM, Antonio Valentino wrote: >> Hi Stuart, >> >> Il 27/08/2012 17:43, Stuart Mentzer ha scritto: >>> Hello, >>> >>> I upgraded to PyTables 2.4.0 and I was "freezing" an application on Windows with PyInstaller. The frozen app fails at this new find_library call in __init__.py: >>> >>> if not ctypes.util.find_library('hdf5dll.dll'): >>> raise ImportError('Could not load "hdf5dll.dll", please ensure' + >>> ' that it can be found in the system path') >>> >>> PyInstaller correctly places this DLL in the same directory as the application .exe where standard Windows DLL search logic will find it. Apparently the find_library doesn't do that in a frozen application. That is a big problem. I had to comment this code out to get a working frozen app. >>> >>> That code was added in revision e9f6919. >>> >> It is mainly a sanity check added under request of one of our users: >> https://github.com/PyTables/PyTables/pull/146 >> >> >>> This is on Windows 7 64-bit with a 32-bit Python toolchain. Trying both PyInstaller 1.5.1 and 2.0. >>> >>> Should I file a bug report? Any easy work-around? >>> >>> Thanks, >>> Stuart >>> >> Yes please file a pull request with your patch. >> It would be nice to preserve the sanity check in standard case so, >> maybe, a good solution could be adding some check on sys.frozen or >> something like that. >> >> Thank you >> > Hello, > > As a workaround for frozen distributions, try to add the sys.executable > directory to os.environ['PATH'] before importing tables. > > Ctypes only tries to find a library in the os.environ['PATH'] > directories, not the current directory or the sys.executable directory > as one could expect. > http://hg.python.org/cpython/file/64640a02b0ca/Lib/ctypes/util.py#l48 > > As a workaround, for distributions that place the HDF5 and other DLLs in > the tables package directory, tables.__init__.py adds the tables package > directory to os.environ['PATH']. This also makes sure that the DLLs are > found when loading the hdf5Extension.pyd and other C extension modules > (another common problem). The use of __file__ to get the tables > directory should better be wrapped in a try..except statement. > https://github.com/PyTables/PyTables/blob/develop/tables/__init__.py#L24 > > Christoph Hi Christoph, Thanks for the info/suggestions. It might be nice to add your comments to the Issue #177 I created. I was aware that altering the PATH is a work-around. Patching PyTables is cleaner and seems like the proper fix, and I think we agree that there is a problem here that should be addressed. Maybe the PyTables test suite should even include a frozen application test. Thanks, Stuart |