By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,501 Members | 1,660 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,501 IT Pros & Developers. It's quick & easy.

py2exe odbc:cannot import dbi module

P: n/a
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?

Thanks,
-Marc
Jul 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
me*****@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. 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.

Thomas
Jul 18 '05 #2

P: n/a
Thomas Heller <th*****@python.net> writes:
me*****@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
Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.