py2exe odbc:cannot import dbi module

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Marc Ederis

    py2exe odbc:cannot import dbi module

    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
  • Thomas Heller

    #2
    Re: py2exe odbc:cannot import dbi module

    mederis@hotmail .com (Marc Ederis) writes:
    [color=blue]
    > 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?[/color]

    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


    Comment

    • Thomas Heller

      #3
      Re: py2exe odbc:cannot import dbi module

      Thomas Heller <theller@python .net> writes:
      [color=blue]
      > mederis@hotmail .com (Marc Ederis) writes:
      >[color=green]
      >> 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?[/color]
      >
      > 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.[/color]

      You can avoid the need for 'import dbi' by patching the builtin
      hidden_imports dictionary, in the get_hidden_impo rts() method in
      py2exe\build_ex e.py, near line 650. Add
      "odbc": ["dbi"]
      and it should work.
      [color=blue]
      > 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.[/color]

      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


      Comment

      Working...