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

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to