欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python非單一.py文件用Pyinstaller打包發(fā)布成exe

 更新時(shí)間:2022年03月25日 09:32:57   作者:隔壁敲代碼的王先生  
第一次將自己做的python爬蟲項(xiàng)目打包成exe,所以留個(gè)筆記,本文詳細(xì)的介紹了python非單一.py文件用Pyinstaller打包發(fā)布成exe,具有一定的參考價(jià)值,感興趣的可以了解一下

一:背景以及項(xiàng)目結(jié)構(gòu)介紹

第一次將自己做的python爬蟲項(xiàng)目打包成exe,搜了很多網(wǎng)上教程,大部分都是打包一個(gè)py文件的小demo,這里先給個(gè)笑臉吧,除了hello-world能去,其他真的屁用沒(méi)有。

先看一下我的項(xiàng)目層級(jí)結(jié)構(gòu),pycharm建立的項(xiàng)目用的虛擬python解析器,(不用本地的python解釋器是因?yàn)榕马?xiàng)目多了,環(huán)境會(huì)越來(lái)越亂),分了很多python package包{core包(項(xiàng)目入口py模塊),docs包(有txt文件等非源代碼資源文件),logs包,test包,utils包),每個(gè)包模塊單獨(dú)開(kāi)發(fā),并且會(huì)有不同包下模塊之間的互相import的依賴關(guān)系,程序的入口時(shí)core包下的spider_main.py。

二:實(shí)施步驟

1:總體思路

整個(gè)步驟一共倆命令

(1)pyi-makespec -w xxx.py

      第一個(gè)命令用  pyi-makespec -w xxx.py  命令生成項(xiàng)目入口模塊的spec文件,然后對(duì)其自定義編輯,在簡(jiǎn)約的spec文件里指定我們需要的資源,就比如要買房子并且裝修,我們現(xiàn)在有一些家具,比如沙發(fā)呀電視呀(源代碼),鍋碗瓢盆(非代碼的資源文件,比如txt文檔,png圖片等,項(xiàng)目中需要用到的)等,入口代碼模塊就是我們看中的這套房子的鑰匙,物業(yè)中介呢(pyinstaller)交付給我們一個(gè)樣板房(由入口模塊生成的spec文件)。樣板房現(xiàn)在設(shè)好了客廳,廚房,臥室等格局(spec文件中不同的配置單元),具體在我們的客廳廚房臥室(不同的配置單元)放什么就是我們根據(jù)房子裝修計(jì)劃(項(xiàng)目執(zhí)行需要)去選擇。

pyi-makespec -w xxx.py

(2)pyinstaller -D xxx.spec

    第二個(gè)命令通過(guò)  pyinstaller -D xxx.spec   命令使用定義好的spec文件(根據(jù)裝修計(jì)劃),生成完整項(xiàng)目的exe程序(裝修我們的房子)。

pyinstaller -D xxx.spec

2:安裝pyinstaller

       因?yàn)槲矣玫氖翘摂Mpython解釋器,所以安裝pyinstaller要在項(xiàng)目虛擬Python環(huán)境空間,pycharm上點(diǎn)擊最下面的Terminal,敲入命令 pip install pyinstaller 進(jìn)行安裝。

pip install pyinstaller

3:具體步驟(以我項(xiàng)目為例子)

(1)生成spec文件,并填充內(nèi)容

執(zhí)行命令:

pyi-makespec -w C:\Users\admin\PycharmProjects\spider\xiechengcar3\venv\Include\xiechengcar_spider\core\spider_main.py

(直接用入口模塊的絕對(duì)路徑)

pyi-makespec -w C:\Users\admin\PycharmProjects\spider\xiechengcar3\venv\Include\xiechengcar_spider\spider_main.py

先看一下剛生成的spec文件都需要我們補(bǔ)充什么內(nèi)容吧,具體功能模塊我搬過(guò)來(lái)了,放在圖下面介紹。

在看一下我補(bǔ)充好的spec文件內(nèi)容,聯(lián)系我的項(xiàng)目層級(jí)結(jié)構(gòu)作參考。

各個(gè)單元的作用。

a) py文件打包配置

針對(duì)多目錄多文件的python項(xiàng)目,打包時(shí)候需要將所有相關(guān)的py文件輸入到Analysis類里。Analysis類中的pathex定義了打包的主目錄,對(duì)于在此目錄下的py文件可以只寫文件名不寫路徑。

b) 資源文件打包配置

資源文件包括打包的python項(xiàng)目使用的相關(guān)文件,如圖標(biāo)文件,文本文件等。對(duì)于此類資源文件的打包需要設(shè)置Analysis的datas。

c)Hidden import配置

 pyinstaller在進(jìn)行打包時(shí),會(huì)解析打包的python文件,自動(dòng)尋找py源文件的依賴模塊。但是pyinstaller解析模塊時(shí)可能會(huì)遺漏某些模塊(not visible to the analysis phase),造成打包后執(zhí)行程序時(shí)出現(xiàn)類似No Module named xxx。這時(shí)我們就需要在Analysis下hiddenimports中加入遺漏的模塊。

(2):開(kāi)始裝修房子(打包exe)。

通過(guò)第二個(gè)命令  pyinstaller -D xxx.spec(直接給個(gè)生成的spec文件的絕對(duì)路徑,spec文件生成在了Terminal代開(kāi)的根目錄下)  打包成exe安裝包。

pyinstaller -D C:\Users\admin\PycharmProjects\spider\xiechengcar3\spider_main.spec

(3):驗(yàn)證exe

(a)查看生成的內(nèi)容,

進(jìn)入執(zhí)行命令的根目錄,發(fā)現(xiàn)多了兩個(gè)文件夾:build 和 dist

build為臨時(shí)文件目錄,里面記錄了一些打包的錯(cuò)誤信息warn-xx.txt,如果是在找不到問(wèn)題可以看兩眼.;dist中存放打包的結(jié)果,可執(zhí)行文件和其它程序運(yùn)行的關(guān)聯(lián)文件都在這個(gè)目錄下。

根目錄內(nèi)容:

build目錄內(nèi)容:

dist目錄內(nèi)容:

(b):運(yùn)行exe文件(1:直接雙擊exe文件 ;2:在cmd下,cd到當(dāng)前目錄,輸入spider_main.exe 運(yùn)行)

三:疑難雜癥和需要注意的坑

1:打包找不到模塊問(wèn)題

進(jìn)入了Terminal就要閑著沒(méi)事 cd 進(jìn)后面的項(xiàng)目目錄了,比如打開(kāi)terminal之后默認(rèn)位置是在 C:\Users\admin\PycharmProjects\spider\xiechengcar3 這個(gè)位置的,不要隨便進(jìn)入 C:\Users\admin\PycharmProjects\spider\xiechengcar3\venv\Include\xiechengcar_spider 這個(gè)目錄下去執(zhí)行命令,必須要在頂層目錄執(zhí)行命令,不要問(wèn)那個(gè)傻逼這么閑還得cd到處看看,沒(méi)錯(cuò)就是我,在打包的時(shí)候,pyinstaller才能找到目錄下的一些lib包和其他包下的具體依賴,如果依賴的東西模塊不全,總會(huì)報(bào)no modle等錯(cuò)誤,不管你怎么填充spec文件的datas列表都無(wú)濟(jì)于事,坑了我半天,頭發(fā)都愁掉光了。

2:打包后,一直提示Failed to execute scrpt xxx問(wèn)題

打包成功,但是沒(méi)有報(bào)任何錯(cuò)誤,但是運(yùn)行exe文件時(shí),總是會(huì)提示excute fail的錯(cuò)誤,然后去看build的warn.txt文檔會(huì)提示各種miss的model信息,不要去往這鉆牛角尖,這時(shí)候,你一是先檢查打包的路徑是不是項(xiàng)目的頂層目錄可以加載lib里的其他依賴模塊,二是編輯spec文件,將exe單元下的console屬性改成True(默認(rèn)是false)記得保存,然后重新執(zhí)行以下第二個(gè)命令,重新打包exe包之后,在cmd下運(yùn)行exe執(zhí)行文件,這時(shí)候會(huì)出現(xiàn)報(bào)錯(cuò)誤原因(如果不改spec這個(gè)字段內(nèi)容,無(wú)論是雙擊運(yùn)行,還是cmd中運(yùn)行,都只會(huì)彈出這個(gè)failed to excute的無(wú)頭腦error,別問(wèn)頭為什么知道,被坑出來(lái)的),根據(jù)提示來(lái)解決具體是缺少依賴模塊原因還是代碼中讀不到非代碼資源(txt,png..),如果讀不到非代碼資源,就根據(jù)提示的not found 的路徑,手動(dòng)建立相關(guān)目錄,放上需要用到的文檔資源。

3:cmd下運(yùn)行打包好的exe,運(yùn)行一段時(shí)間卡主不動(dòng),按一下回車才繼續(xù)

原因:cmd跑exe的時(shí)候,在CMD快速編輯模式下,無(wú)意點(diǎn)到文字會(huì)選中文字,自動(dòng)進(jìn)入標(biāo)記模式,并暫停程序,就得按任意鍵才能往下跑。

 解決方法:

(1):非查錯(cuò)時(shí)避免cmd,采用雙擊exe文件來(lái)執(zhí)行

(2):將選中文本進(jìn)入cmd的文本編輯模式取消

CMD 在運(yùn)行Python 程序時(shí),偶爾會(huì)暫停,也不報(bào)錯(cuò),按enter 可以繼續(xù)。

根本原因在于,在快速編輯模式下,無(wú)意點(diǎn)到文字會(huì)選中文字,自動(dòng)進(jìn)入標(biāo)記模式,并暫停程序。

解決方法:

1. CMD 標(biāo)題欄右鍵

CMD運(yùn)行python程序自動(dòng)暫停問(wèn)題解決

 2. 取消快速編輯(取消后 無(wú)法復(fù)制CMD中的文字)

CMD運(yùn)行python程序自動(dòng)暫停問(wèn)題解決

4:其他注意事項(xiàng)

(1):程序進(jìn)行打包exe的時(shí)候,最好把模塊中的測(cè)試main函數(shù)注釋掉!

pyinstaller不會(huì)和python一樣,即使你用   if __name__ == '__main__':  表示出來(lái)了,pyinstall在導(dǎo)入模塊的時(shí)候,也會(huì)把你的main下的內(nèi)容全部進(jìn)行了編譯,所以人生建議,一定要注釋掉,如果再有路徑引用,那真是各種 file not found  問(wèn)題層出不巧,讓你摸不到頭腦!不管你其他模塊調(diào)沒(méi)調(diào)用!

(2)用windos powershell 運(yùn)行你的exe程序的時(shí)候,程序結(jié)束,會(huì)報(bào)filenotfound問(wèn)題,但是直接雙擊打開(kāi)exe或者pycharm運(yùn)行就沒(méi)問(wèn)題

讓你很疑惑:為什么最后要去c盤找這個(gè)破東西息,而且哪怕里面沒(méi)有寫入任何數(shù)據(jù),但是他就是要這個(gè)文件,例如我這個(gè)問(wèn)題:因?yàn)槲业膌og文件的路徑是用的這個(gè)函數(shù)

os.path.dirname(os.path.dirname(__file__)) + '/docs/ipool.log'

在pycharm里是獲取了當(dāng)前的父目錄然后拼接成/docs 將log寫在了父目錄下的/docs/的ipool.log中,打包成exe的時(shí)候這個(gè)文件是寫在dist\spider_main\Include\xiechengcar_spider\docs 這里,但是在windos powershell 里面,當(dāng)前的父目錄默認(rèn)是在c:// 這里,他就要找c://docsipool.log文件,具體為什么會(huì)在程序結(jié)束最后拋出了這樣的路徑錯(cuò)誤,我還是百思不得其解,知道其原因的網(wǎng)友希望能幫忙解答一下,對(duì)于這個(gè)問(wèn)題經(jīng)過(guò)測(cè)試三種方法,一是在它需要的這個(gè)目錄放一個(gè)這個(gè)的文件,二是:直接雙擊exe來(lái)執(zhí)行就好,程序運(yùn)行完了,直接就關(guān)掉了,沒(méi)發(fā)現(xiàn)報(bào)這個(gè)錯(cuò),三:直接忽略掉,但是我不確定會(huì)不會(huì)影響項(xiàng)目結(jié)果。

 到此這篇關(guān)于python非單一.py文件用Pyinstaller打包發(fā)布成exe的文章就介紹到這了,更多相關(guān)Pyinstaller打包發(fā)布成exe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 共享變量加鎖、釋放詳解

    Python 共享變量加鎖、釋放詳解

    這篇文章主要介紹了Python 共享變量加鎖、釋放詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python+Kepler.gl實(shí)現(xiàn)時(shí)間輪播地圖過(guò)程解析

    Python+Kepler.gl實(shí)現(xiàn)時(shí)間輪播地圖過(guò)程解析

    這篇文章主要介紹了Python+Kepler.gl實(shí)現(xiàn)時(shí)間輪播地圖過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn)

    pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn)

    本文主要介紹了pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python3.5.3下配置opencv3.2.0的操作方法

    Python3.5.3下配置opencv3.2.0的操作方法

    下面小編就為大家分享一篇Python3.5.3下配置opencv3.2.0的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python引用傳值概念與用法實(shí)例小結(jié)

    Python引用傳值概念與用法實(shí)例小結(jié)

    這篇文章主要介紹了Python引用傳值概念與用法,簡(jiǎn)單分析了Python引用傳值的概念、功能并結(jié)合實(shí)例形式總結(jié)分析了Python引用傳值的具體實(shí)現(xiàn)與使用方法,需要的朋友可以參考下
    2017-10-10
  • Python通過(guò)樸素貝葉斯和LSTM分別實(shí)現(xiàn)新聞文本分類

    Python通過(guò)樸素貝葉斯和LSTM分別實(shí)現(xiàn)新聞文本分類

    樸素貝葉斯法(Naive Bayes model)是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法。LSTM則是一種時(shí)間循環(huán)神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測(cè)時(shí)間序列中間隔和延遲相對(duì)較長(zhǎng)的重要事件。本文將通過(guò)這兩個(gè)方法分別實(shí)現(xiàn)新聞文本分類,需要的可以參考一下
    2021-12-12
  • Python中的協(xié)程(Coroutine)操作模塊(greenlet、gevent)

    Python中的協(xié)程(Coroutine)操作模塊(greenlet、gevent)

    這篇文章介紹了Python中的協(xié)程(Coroutine)操作模塊(greenlet、gevent),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天

    只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天

    今天小編就為大家分享一篇關(guān)于只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Python3 利用face_recognition實(shí)現(xiàn)人臉識(shí)別的方法

    Python3 利用face_recognition實(shí)現(xiàn)人臉識(shí)別的方法

    這篇文章主要介紹了Python3 利用face_recognition實(shí)現(xiàn)人臉識(shí)別的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python3的pip路徑在哪

    python3的pip路徑在哪

    在本篇文章里小編給大家分享的是關(guān)于python3中pip路徑位置的相關(guān)文章,有興趣的朋友們學(xué)習(xí)下吧。
    2020-06-06

最新評(píng)論