You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Py2exe打包含cx_Oracle的Exe在其他电脑无法运行的解决咨询

解决DPI-1047错误:无需额外安装Oracle客户端的打包方案

方法1:手动补充Oracle Instant Client依赖文件

py2exe无法自动打包Oracle客户端的底层库,需要手动复制关键文件到打包后的目录:

  • 下载与你的Oracle服务端版本匹配的64位Oracle Instant Client Basic Package,解压后提取以下文件:
    • oci.dll
    • oraocieiXX.dll(XX为版本号,如19c对应oraociei19.dll,11g对应oraociei11.dll)
    • oraons.dll
  • 将这些文件复制到py2exe生成的dist文件夹(与exe文件同目录),然后压缩整个dist文件夹分发给用户,解压后即可运行。

方法2:改用oracledb库彻底摆脱客户端依赖

oracledb是cx_Oracle的官方替代库,支持Thin模式,无需本地Oracle客户端即可连接数据库:

  1. 替换依赖库:卸载cx_Oracle,安装oracledb
    pip uninstall cx_Oracle
    pip install oracledb
    
  2. 修改脚本导入:将import cx_Oracle替换为import oracledb
  3. 连接代码保持兼容,或显式指定Thin模式(默认已启用):
    conn = oracledb.connect(
        user="你的用户名",
        password="你的密码",
        dsn="数据库主机:端口/服务名"
    )
    
  4. 重新用py2exe打包,生成的exe无需额外文件即可在其他机器运行。

方法3:换用PyInstaller打包

PyInstaller对cx_Oracle的依赖处理更便捷,配合手动添加文件即可解决问题:

  1. 安装PyInstaller:
    pip install pyinstaller
    
  2. 将Oracle Instant Client的3个关键dll文件放到脚本所在目录
  3. 执行打包命令(替换your_script.py为你的脚本名,替换版本号为实际值):
    pyinstaller --onefile --add-binary "oci.dll;." --add-binary "oraociei19.dll;." --add-binary "oraons.dll;." your_script.py
    
  4. 将生成的exe和dll文件放在同一目录,压缩后分发给用户。

内容的提问来源于stack exchange,提问作者Chris Laffin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:31:01