Skip to main content
 首页 » 编程设计

python之py2exe、sqlalchemy 和 cx_oracle : ImportError: No module named oracle

2025年05月04日11bhlsheji

我正在尝试使用 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 是什么意思吗? 提前致谢。

请您参考如下方法:

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

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