py2exe、sqlalchemy和cx_oracle: 导入错误: 找不到oracle模块

2 投票
2 回答
2545 浏览
提问于 2025-04-16 05:47

我正在尝试用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

只需要在你主要的模块最上面加上这行代码:import sqlalchemy.dialects.oracle。

1

你可能需要明确告诉py2exe去导入这个包,可以使用packages这个选项。一个好的检查方法是查看构建目录,看看oracle模块是否真的在那儿。

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

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

撰写回答