py2exe odbc:cannot import dbi module

Thomas Heller theller at python.net
Wed Mar 3 03:08:51 EST 2004


Thomas Heller <theller at python.net> writes:

> mederis at hotmail.com (Marc Ederis) writes:
>
>> Hello,
>>
>> I'm trying to create an executable with py2exe, and it uses the odbc
>> module. The script runs fine until I use py2exe on it and run the
>> .exe. Then I get:
>>
>> --
>> Traceback (most recent call last):
>>   File "dbmod.py", line 2, in ?
>>   File "odbc.pyo", line 9, in ?
>>   File "odbc.pyo", line 7, in __load
>> odbc: Cannot import dbi module
>> --
>>
>> dbi.dll is in the dist folder, and so is odbc.pyd.
>>
>> Does anyone know how to solve this problem?
>
> It seems you have to first explicitely import the dbi module before the
> odbc module can be imported.
>
> """
> import dbi, odbc
> """
>
> py2exe doesn't know that dbi.dll is a python extension - it is only
> found as binary dependency.

You can avoid the need for 'import dbi' by patching the builtin
hidden_imports dictionary, in the get_hidden_imports() method in
py2exe\build_exe.py, near line 650. Add
   "odbc": ["dbi"]
and it should work.

>  And you should not (must not?) distribute
> odbc32.dll, which is also copied to the dist folder.
>
> In py2exe 0.5, you *should* be able to specify
>    dll_exludes = ["odbc32.dll"]
> but this doesn't seem to work.

I got this wrong - it does work, but you have to pass an options dict to
the setup script, something like this:

setup(...
      options = {"py2exe":
                  {"dll_excludes": ["odbc32.dll"]}}
     )

Thomas





More information about the Python-list mailing list