py2exe,sqlalchemy和cx_oracle:ImportError:没有名为oracle的模块

时间:2010-10-20 09:53:12

标签: python oracle py2exe

我正在尝试使用py2exe创建二进制文件,这里是py2exe输出的最后一行:

*** copy dlls ***
copying C:\Apps\Python27\python27.dll -> C:\Documents and Settings\nikolay.derka
ch\Desktop\UMTScellsChecking\UMTScellsChecking\dist
setting sys.winver for 'C:\Documents and Settings\nikolay.derkach\Desktop\UMTSce
llsChecking\UMTScellsChecking\dist\python27.dll' to 'py2exe'
copying C:\Apps\Python27\w9xpopen.exe -> C:\Documents and Settings\nikolay.derka
ch\Desktop\UMTScellsChecking\UMTScellsChecking\dist
copying C:\Apps\Python27\lib\site-packages\py2exe\run.exe -> C:\Documents and Se
ttings\nikolay.derkach\Desktop\UMTScellsChecking\UMTScellsChecking\dist\UMTSCell
Test.exe
The following modules appear to be missing
['_scproxy', 'sqlalchemy.cprocessors', 'sqlalchemy.cresultproxy', 'win32api', 'w
in32con', 'win32pipe']

*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.

Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

   USER32.dll - C:\WINDOWS\system32\USER32.dll
   SHELL32.dll - C:\WINDOWS\system32\SHELL32.dll
   WSOCK32.dll - C:\WINDOWS\system32\WSOCK32.dll
   ADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dll
   WS2_32.dll - C:\WINDOWS\system32\WS2_32.dll
   KERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dll

我原来的python脚本运行得很好,但是当我执行生成的二进制文件时,我得到以下内容:

C:\Documents and Settings\nikolay.derkach\Desktop\UMTScellsChecking\UMTScellsChe
cking\dist>UMTSCellTest.exe
Traceback (most recent call last):
  File "UMTSCellTest.py", line 53, in <module>
  File "sqlalchemy\engine\__init__.pyc", line 244, in create_engine
  File "sqlalchemy\engine\strategies.pyc", line 46, in create
  File "sqlalchemy\engine\url.pyc", line 99, in get_dialect
ImportError: No module named oracle

另外,这是我用于py2exe的setup.py:

from distutils.core import setup

import py2exe, sys

sys.argv.append('py2exe')

setup(
      options = {"py2exe": {
        'bundle_files': 2,
        'compressed': True,
        'dll_excludes': ['oci.dll']}},
      console=[{'script': 'UMTSCellTest.py'}]
      )

任何有关ImportError可能含义的想法? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可能需要明确指定py2exe以使用packages选项导入包。检查的一个好方法是查看构建目录,看看oracle模块实际上是在那里。

options = dict(optimize=2,
           bundle_files=2,
           compressed=True,
           packages=["oracle"],
           dll_excludes=['oci.dll'])

setup_dict['options'] = {"py2exe":options}

答案 1 :(得分:0)

只需在主模块的顶部添加import sqlalchemy.dialects.oracle。