Python开发之旅,记那些你知道不知道的坑
最近有个小程序要开发,是对Oracle数据库的开发。本想用C#开发的,也不知怎么的看到了案头的那本Python的学习书,想想为了紧跟时代步伐,为了日后可以在孩子编程时做出大老的样子,决定学习一下用Python这个优雅、先进的语言开发一个。各路专家都说了要想学习一门语言,就要去亲自实践一次,可真的没有想到,这居然是一条布满荆棘,到处是坑的路途。
一、搭建开发环境
万事开头难,谁知步步难!万事不决问百度,当然必需祭出百度这个神兵利器了。因为主要是用于图形界面开发,自己又比较喜欢VS系列的所见即所得的风格,于是选择了Python+PyQt5+pyCharm来搭建。作为一个新时代的老年人,东西当然要用新的咯,Python -3.7.4,PyQt5 -5.13.0,pyCharm -2019.2.1,噼里啪啦下了一堆软件,Python装的很顺利考虑后期程序需要对excel、pdf、word、Oracle等的开发,还学会了用PIP下了对应的开发模块,还有程序发布打包的pyInstaller。看着硬盘中逐渐膨胀的硬盘空间,心里小激动一下,自我感觉良好。
二、学习工具运用
安装完了Python+PyQt5+pyCharm后就正式进入了开发测试环节,首先对PATH进行了修改,用命令行模式测试了“hello world”都没问题,接着进入pyCharm真的把我难住了。
- 1.出现汉化软件后不能使用settings。
解决方法:用解压软件打开汉化包,进入messages目录,找到settings的配置文件:VcsBundle.properties以及定位的配置文件:UIBundle.properties将这两个文件删掉重新启动IDEA即可。 - 2.无法新建项目,长时间卡在建立虚拟环境处,进入已有项目后提示no python interpreter for the project。
解决方法:主要是项目解释器出问题了,直接贴链接。https://jingyan.baidu.com/article/a501d80c540e62ec630f5e1f.html - 3.PyQt5不能使用
解决方法:主要是两点,一是添加PyQt5的PATH,另一个就是在File | Settings | Tools | External Tools里进入工具设置。具体操作不写了,直接贴链接。
https://www.cnblogs.com/zitech/p/9054153.html - 4.程序打包发布失败,程序运行一闪而过。
解决方法:把打包好的exe程序丢到cmd中运行发现提示,ImportError: unable to find Qt5Core.dll on PATH
[11632] Failed to execute script demo
这就奇怪了,看错误是说系统path路径下找不到dll库,以为是缺少路径了,于是就在系统环境变量path里把pyqt5的库目录给加进去,发现还是没用,没办法只能去网上寻找答案,但是找了一大圈还是没找到解决办法,几翻折腾下,还是在必应里找到几个网站,才明白原因。
就是有的版本pyqt5库对系统变量的加载存在bug,具体原因只有官方才能解释了,咱也没法管了,对有bug的版本库提供一种办法就是,在主程序中pyqt5库import之前就对系统变量进行手动设置,import代码如下:
import sys, os
if hasattr(sys, 'frozen'):
os.environ['PATH']=sys._MEIPASS+";"+ s.environ['PATH']
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import *
from untitled import Ui_MainWindow
from PyQt5.QtGui import *
这样打包之后exe就能完美运行了。
三、推倒所有重来
最终,我的测试小程序可以在开发电脑上跑起来了,接着就放到了运行环境里进行试验。当我怀着忐忑的心情在实验电脑上运行时,“噔”的一声浇灭了心中小小的火。系统报错:无法定位程序输入点 GetFinalPathNameByHandleW 于动态链接库 KERNEL32.dll 上。只好继续百度,发现原因:Getfinalpathnamebyhandlew XP 不支持这个函数的;python对xp支持的最后版本为3.4.4 我用的python3.7.4。当场昏过去,之前所有的都白搞,还得在XP系统下开发才行啊,上了鬼子的当了!没有办法,重头再来,下了VM虚拟机,部署了一个WINXP,Orcale8,重新安装Python -3.4.4,PyQt5 -5.5.1,pywin32-219.win32-py3.4,Pyinstaller3.2.1,pyCharm -2018.3,具体方法见
https://blog.csdn.net/Victor_zero/article/details/8293344
在终于安装完了这些个东西后,程序的确跑起来了,自以为终于把坑都填完了,结果还有更大的坑在等着我,我把用于连接数据库的cx_Orcale安装好后,数据库死活连不上,报了个cx_Oracle.DatabaseError: DPI-1050: Oracle Client library is at version 8.1 but must be at version 11.2 or higher。查阅各种资料,甚至去了stackoverflow查全英文的网站(鄙人英文实在垃圾),最终发现这个cx_Orcale最低是从Oracle9开始支持的,对于Oracle8这样的老古董真的没办法,而现在市面上Oracle8已经基本绝种了,这意味着我无法用Python来开发吗?
四、取得初步成效
一个大雷劈下来,看了看时间,已经深夜12点了,想了想,洗洗睡觉了,还是换回C#或是易语言吧。无奈之下下了几个C#和易语言连接Oracle8的例子准备睡了。躺在床上看例子时发现C#和易语言都是用ODBC对Oracle数据库进行操作的,猛然一惊醒,想到他们都可以用ODBC,那为什么python不用ODBC试试呢?立马翻身起来找资料,最终在stackoverflow查到这样一段话,果然可以,立即下了pyodbc,试验了下,终于成功连上了老古董,数据也获取出来了。
五、阶段成果总结
小小总结一下,这次吃老大亏的最主要原因还是需求分析没有做足,特别是在运行环境,系统部署等方面了分析不足,在WIN7上开发WINXP的东西,对原有系统不了解,使得一开始就走了弯路。还有很多资料需要一定的英文水平,自已的英文还要加强。最后总结一下自己开发环境的软件最终部署情况。
- 操作系统:Windows XP (32位)
- 开发语言:Python -3.4.4
- 开发软件:pyCharm -2019.3
- 使用模块:pywin32-219.win32-py3.4、PyQt5 -5.5.1、Pyinstaller3.2.1、Xlrd 1.2.0、Xlwt 1.3.0、python-docx 0.8.10
总有一天,你会感谢如此努力的自己。
by逝水如梦@2019.9.1