我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pyinstaller打包cx_Oracle库会遇到什么问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pyinstaller打包cx_Oracle库会遇到什么问题

这篇文章主要介绍pyinstaller打包cx_Oracle库会遇到什么问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

pyinstaller打包cx_Oracle库问题处理记录

下载cx_Oracle

在windows下不要使用easy_install或者pip,因为这样安装不会同步环境,并报错:

distutils.errors.DistutilsSetupError: cannot locate Oracle include files in...

因此下载cx_Oracle5.3.exe文件安装

https://files.pythonhosted.org/packages/48/83/15dd03c752d8840ce763bfad5ebd02568f16b2d6709a2b7e6ff97bc3c0f3/cx_Oracle-5.3-11g.win-amd64-py2.7.exe

下载Oracle Instant Client或使用完整的数据库客户端安装包,版本需11.2以上。

数据库客户端版本和python版本及位数需一致。

下载地址:

64位:https://www.oracle.com/technetwork/topics/winx64soft-089540.html

32位:http://www.oracle.com/technetwork/topics/winsoft-085727.html

下载后解压到某一路径,并将该路径添加到系统的环境变量,命名为ORACLE_HOME,将ORACLE_HOME添加到path下,否则会报错

cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

该目录下可自建network\admin文件夹,存放tnsnames.ora, sqlnet.ora or oraaccess.xml文件

安装VC环境

Oracle Instant Client libraries需要VC环境,并匹配对应的位数和版本,对应关系如下:

For Instant Client 18 or 12.2 install VS 2013

For Instant Client 12.1 install VS 2010

For Instant Client 11.2 install VS 2005 64-bit or VS 2005 32-bit

解决中文乱码问题

1设置环境变量(全局,可能对其它Oracle客户端产生影响)

“计算机”->“系统属性”->“高级系统设置”->“系统属性/高级 选项卡”->“环境变量”->“系统变量”->“新建”->

变量名:NLS_LANG

变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2 python环境下设置

import os  

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'  

#或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'

连接数据库

import cx_Oracle  

db=cx_Oracle.connect('system/oracle@10.98.156.148/oral')

cursor = db.cursor()

cursor.execute ("select * from dba_users where user_id=62")

row = cursor.fetchall ()

print (row[0])

db.commit()  

cursor.close ()

db.close(

如上配置后,不需要再本机上安装Oracle,也不需要新建NETWORK/ADMIN目录添加tnsnames.ora文件,更不要把oci.dll移到site-packages

打包后执行报错:cx_oracle_Error object at 0x000

环境:win2008r2_x64+py2.7.13_x64上

错误提示:cx_Oracle.DatabaseError: DPI-1050: Oracle Client library must be at version 11.2

解决:确认当前版本时11以上,如是,将安装路径下Lib和安装路径都添加到path变量前面。

win2008r2 x64 直接运行脚本无问题,运行打包程序报错.无法定位程序输入点ucrtbase.terminate 于动态链接库api-ma-win-crt-runtime-11-1-0.dll上

解决步骤:

A、打开CMD,输入 winver.exe ,回车运行,查看当前Windows版本

如果版本为7600,则首先安装:windows6.1-KB976932-X64.exe(链接),将版本升级为?7601:Service Pack 1,再进行第2步;

如果版本如上图所示,为7601:Service Pack 1,直接进行第2步;

B、安装:Microsoft .NET Framework 4.6.1 NDP461-KB3102438-Web.exe(链接);

C、安装:Visual C++ Redistributable for Visual Studio 2015 vc_redist.x64.exe(链接);

D、一般情况下,到第3步问题已经解决,但是如果再一次安装软件,还是会出错“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-|1-1-0.dll”,那么可以安装补丁:Windows6.1-KB2999226-x64 .msu(链接);

错误提示:cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

如命令行执行报此错误:将instantclient目录下的所有*.dll文件拷贝到Python27\Lib\site-packages目录下,可解决问题。

如程序命令行执行无问题,命令行sqlplus直连数据库无问题,但打包后执行报错。则如下解决

网上类似情况:

https://stackoverflow.com/questions/36478831/pyinstaller-cx-oracle-interfaceerror-unable-to-acquire-oracle-environment-hand

问题的原因是pyinstall打包时没将oracle链接库打包进去,导致换个环境就报错。

先正常打包一遍,生成spec文件,如

python -F checkreport.py -i dl.ico

再编辑程序目录下checkreport.spec文件,修改a.binaries行,修改后如下。须将oraociei11.dll拷贝到本目录下

a.binaries+[('oraociei11.dll','oraociei11.dll','BINARY')],

然后重新编译一遍;

pyinstaller checkreport.spec

测试后在别机器上运行正常。

官网中关于ODBC的资料

https://www.oracle.com/technetwork/database/features/oci/odbc-ic-releasenotes-094306.html

On Windows

Patching the Instant Client ODBC driver on Windows can be done only by manually copying the ODBC driver shared library files and supporting library files from a patched ORACLE_HOME or from an unpacked Oracle Database Bundle patch. These should be copied into the Instant Client directory. Generating an Instant Client ODBC package is not available on Windows. 

The files that must be copied to the Instant Client directory:

ODBC driver shared library files: sqora32.dll, sqoras32.dll, sqresus.dll, sqresja.dll

Required additional files when using Oracle Basic Instant Client:

For 12c: oraociei12.dll, orannzsbb12.dll, oci.dll, oraons.dll, ociw32.dll, oraociei12.sym, orannzsbb12.sym, oci.sym, ociw32.sym

For 11g: oraociei11.dll, orannzsbb11.dll, oci.dll, ociw32.dll, oraociei11.sym, orannzsbb11.sym, oci.sym, ociw32.sym

Required additional files when using Oracle Basic Light Instant Client:

For 12c: oraociicus12.dll, orannzsbb12.dll, oci.dll, oraons.dll, ociw32.dll, oraociicus12.sym, orannzsbb12.sym, oci.sym, ociw32.sym

For 11g: oraociicus11.dll, orannzsbb11.dll, oci.dll, ociw32.dll, oraociicus11.sym, orannzsbb11.sym, oci.sym, ociw32.sym

Note: While copying from the Oracle Database Bundle patch, some of the files above may be missing. This implies that those files are unchanged and do not need to be patched.

打包程序运行报错:UnicodeDecodeError: 'utf-8' codec can't decode byte

本机环境:win10_x64,anaconda_3 python 3.6.5_x64,cx_oracle 7

程序在命令行运行无问题,用pyinstaller打包后,本机运行无问题,在别机器运行报错,报错提示如下

C:\Users\super>D:\checkreportv1\checkreportv1\checkreportp36w10.exe

Traceback (most recent call last):

  File "checkreport.py", line 9, in <module>

  File "<frozen importlib._bootstrap>", line 971, in _find_and_load

  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked

  File "d:\programdata\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module

  File "oradb.py", line 4, in <module>

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 53: invalid start byte [6380] Failed to execute script checkreport

网搜,同类情况

https://ask.csdn.net/questions/647140?sort=votes_count

使用Pyinstaller打包含有cx_Oracle模块遇到的问题

该问题暂没找到解决办法。找了一个win2008r2_x64+py2.7.13_x64+cx_Oracle_5.13环境,打包后转发系统执行正常。

以上是“pyinstaller打包cx_Oracle库会遇到什么问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pyinstaller打包cx_Oracle库会遇到什么问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

pyinstaller打包cx_Oracle库会遇到什么问题

这篇文章主要介绍pyinstaller打包cx_Oracle库会遇到什么问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!pyinstaller打包cx_Oracle库问题处理记录1.下载cx_Oracle在wind
2023-06-02

pyinstaller打包遇到的问题解决

本文主要介绍了pyinstaller打包遇到的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-17

React Native打包apk会遇到什么问题

这篇文章给大家分享的是有关React Native打包apk会遇到什么问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。生成一个签名密钥在项目的目录下打开cmd命令窗口输入一下命令运行:keytool -genk
2023-05-30

Gentoo中proftpd会遇到什么问题

这篇文章主要介绍了Gentoo中proftpd会遇到什么问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我在使用proftpd中遇到了一些问题,并解决了它们。这些问题可能只
2023-06-16

seata springcloud整合会遇到什么问题

这篇文章给大家分享的是有关seata springcloud整合会遇到什么问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SEATA概要seata 是alibaba 出的一款分布式事务管理器,他有侵入性小,实现
2023-06-20

SpringBoot定时任务会遇到什么问题

这篇文章主要为大家展示了“SpringBoot定时任务会遇到什么问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot定时任务会遇到什么问题”这篇文章吧。前言springboot
2023-05-30

springboot访问静态资源会遇到什么问题

这篇文章主要介绍了springboot访问静态资源会遇到什么问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。访问静态资源遇到的坑及解决开始是以这种结构进行的,结果页面上一篇
2023-06-29

Spring延迟初始化会遇到什么问题

本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。List<坑> 坑列表 = new ArrayList<>(2);首先,让我们回顾一下 Spring 延迟初始化的概
2023-08-03

Pureftpd中使用防火墙会遇到什么问题

这篇文章主要介绍了Pureftpd中使用防火墙会遇到什么问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先,打开连向FTP服务器的21端口.此外,应该允许来自<=20端口
2023-06-16

vue使用节流函数会遇到什么问题

小编给大家分享一下vue使用节流函数会遇到什么问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!举一个? 业务场景概念:关于防抖函数的介绍关于addEventLi
2023-06-15

客户端安装虚拟机会遇到什么问题

这篇文章将为大家详细讲解有关客户端安装虚拟机会遇到什么问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。虚拟机是很多开发人员会用到的软件,godadly小编自己也用过,那么大家在安装使用的时候总会遇到一些
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录