python連接oracle數(shù)據(jù)庫(kù)需要import?cx_oracle,安裝引入的坑就先不寫了,主要記一下通過(guò)pyinstaller打包成exe的坑显晶。
我通過(guò)pyinstaller -F -w Insert.py打包生成exe后调塌,在本機(jī)運(yùn)行正常,但是拷貝到其他電腦头镊,就報(bào)錯(cuò)蚣驼。由于上周解決的,現(xiàn)在才來(lái)寫相艇,有些環(huán)節(jié)記不清了颖杏,報(bào)錯(cuò)也有過(guò)幾種情況。
Traceback (most recent call last):
File "Insert.py", line 12, in
ImportError: DLL load failed: 找不到指定的模塊坛芽。
[7672] Failed to execute script 'Insert' due to unhandledexception!
還有cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle的報(bào)錯(cuò)
網(wǎng)上百度了好幾天留储,最后通過(guò)下面方法解決。
首先咙轩,拷貝到的新電腦获讳,需要安裝visoal運(yùn)行庫(kù),網(wǎng)上下載安裝一下活喊。我是用了同事給的個(gè)VisualCppRedist_AIO_x86_x64_v55.rar丐膝。
Oracle Instant Client libraries需要VC環(huán)境,并匹配對(duì)應(yīng)的位數(shù)和版本,對(duì)應(yīng)關(guān)系如下:
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
然后就是pyinstaller看起來(lái)并不會(huì)將動(dòng)態(tài)鏈接庫(kù)自動(dòng)打包胧弛,所以我們需要告訴pyinstaller要打包哪些動(dòng)態(tài)鏈接庫(kù)尤误,步驟如下(假設(shè)python文件名為 ?Insert.py):
1. 使用pyinstaller -F Insert.py 打包后會(huì)生成一個(gè)?Insert.spec文件,我們要修改這個(gè)spec文件结缚。
將 a.binaries, 改為
a.binaries+[('oraociei12.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\instantclient\\oraociei12.dll','BINARY'),('oci.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\bin\\oci.dll','BINARY'),('oraons.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\bin\\oraons.dll','BINARY')],
以上路徑需要參照oracle instantclient损晤、bin目錄中各文件的路徑進(jìn)行修改。
2. 依照spec文件打包红竭,執(zhí)行命令如下:
pyinstaller -F ?Insert.spec
我用的是pyinstaller -D Insert.spec命令尤勋,感覺(jué)應(yīng)該差不多喘落。但是運(yùn)行后除了界面還會(huì)帶個(gè)黑框,這個(gè)修改一下Insert.spec文件中的
console值最冰,修改為console=False瘦棋。
我是通過(guò)以上步驟成功打包出程序,然后拷貝到新的電腦后可以運(yùn)行暖哨。今天寫可能記不了那么清楚赌朋,如果有不當(dāng)?shù)牡胤剑?qǐng)見(jiàn)諒篇裁。
參考鏈接:https://www.cnblogs.com/vanwoos/p/12020727.html
https://blog.csdn.net/cuidai4743/article/details/100332152