摘要:前言昨天決定分享一下最近寫的爬蟲程序,參考了這篇文章,看了下里面幾個常見打包軟件的簡介表格可惜沒因為是給小白用戶使用,做成單個文件形式,只能在和之間選擇去各自官網看了下,發現很久沒更新了,對新版本的支持也不是太好,就決定用來封裝打包這里略過
前言
昨天決定分享一下最近寫的exhentai爬蟲程序,參考了這篇文章,看了下里面幾個常見打包軟件的簡介表格(可惜沒nuitka)
因為是給小白用戶使用,做成單個文件形式,只能在Pyinstaller和py2exe之間選擇
去各自官網看了下,發現py2exe很久沒更新了,對python3新版本的支持也不是太好,就決定用Pyinstaller來封裝/打包
這里略過Pyinstaller的安裝和使用,重點說明癥狀,分析過程,解決辦法和教訓
打包成功
運行程序時出現如下報錯
C:UsersxoxoPycharmProjectsHentai_Spider>main Traceback (most recent call last): File "main.py", line 6, in分析過程from config import args File " ", line 2237, in _find_and_load File " ", line 2226, in _find_and_load_unlocked File " ", line 1200, in _load_unlocked File " ", line 1129, in _exec File "C:Python34libsite-packagesPyInstallerloaderpyimod03_importers.py", line 631, in exec_module exec(bytecode, module.__dict__) File "config.py", line 11, in parser.add_argument("-sd", "--savedir", default=config["ARGS"]["SAVEDIR"]) File "configparser.py", line 936, in __getitem__ KeyError: "ARGS" [7836] Failed to execute script main C:UsersxoxoPycharmProjectsHentai_Spider>
0 . StackOverflow搜了下發現沒啥經驗可供參考……
1 . main.py程序是完全可以跑通的,從未出現過這個報錯,所以確定問題出在封裝過程中
2 . 報錯信息上看,是(封裝后的程序)執行config.py時出了問題
3 . 通過控制變量排除法(過程比較繁瑣,不一一列舉),確定是在讀取config.ini時出的錯,把賦值config_path這里改成確定的路徑即可正常運行
代碼如下:
config = configparser.ConfigParser() config_path = os.path.join(os.path.dirname(__file__), CONFIG_FILE) config.read(config_path)
順便解釋一下,我的設計意圖是讓config.py去讀取其所在目錄下的配置文件,main.py和config.py在同一目錄
4 . 由于CONFIG_FILE是常量(文件名),那最終就懷疑到os.path.dirname(__file__)部分
5 . 在賦值config_path =這句后加上print(os.path.dirname(__file__),看看封裝后這里的file會到哪個目錄,發現變成了C:UsersxoxoAppDataLocalTemp\_MEI92882
C:UsersxoxoPycharmProjectsHentai_Spider>main C:UsersxoxoAppDataLocalTemp\_MEI92882 Traceback (most recent call last): File "main.py", line 6, infrom config import args File " ", line 2237, in _find_and_load File " ", line 2226, in _find_and_load_unlocked File " ", line 1200, in _load_unlocked File " ", line 1129, in _exec File "C:Python34libsite-packagesPyInstallerloaderpyimod03_importers.py", line 631, in exec_module exec(bytecode, module.__dict__) File "config.py", line 12, in parser.add_argument("-sd", "--savedir", default=config["ARGS"]["SAVEDIR"]) File "configparser.py", line 936, in __getitem__ KeyError: "ARGS" [9296] Failed to execute script main C:UsersxoxoPycharmProjectsHentai_Spider>
6 . 可以看到config.py雖然封裝前和main.py在一個文件夾下,但被封裝后,執行時就處于臨時文件夾,這時候取其自身所在目錄的動作就有問題
解決方案main.py來抓目錄信息,再傳給config.py(中函數)
教訓封裝程序沒有聰明到能理解設計意圖,所以寫代碼的得更聰明點
如果某項目可能會被封裝,讓被封裝的那個程序來抓取目錄信息并傳遞
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44478.html
摘要:打包成單文件所使用的命令為打包成文件夾所使用的命令為不管是哪種打包方式都會留下一個文件。這樣我們只需將腳本文件和腳本文件放置到同一文件夾下,運行我們的腳本。可以看到已經完美的反編譯出其中的腳本好了,相信大家已經明白了反編譯的原理。 近期閱讀了一篇很感興趣的文章,為免后續文章被刪無法再閱讀,現...
鎮樓圖 文章目錄 一點想說的必要配置removebg配置安裝對應的 Python 庫獲取API Key 無界面版修改圖片背景色修改圖片大小 升級版設置窗口主題與標題添加選擇圖片路徑組件添加選擇保存路徑組件添加選擇背景顏色組件添加填寫圖片尺寸組件添加填寫API-KEY組件添加控制按鈕添加輸出框顯示設置組件位置設置組件樣式 源碼打包??源碼獲取方式?? 一點想說的 想當年我不會...
摘要:本文來自最近經常用到一個程序,但是每次在不同電腦上用,希望能把腳本發布為脫離平臺運行的可執行程序,比如單個。本身并不屬于包。在安裝之前需把環境配置好。測試打包文件放在當前目錄的文件夾里面命令運行成功后會生成一個文件夾。 本文來自 Alliots blog最近經常用到一個.py程序,但是每次在不同電腦上用,希望能把Python腳本發布為脫離Python平臺運行的可執行程序,比如單個exe...
摘要:起因是從某發現了一個站掛機助手,依賴于直播的一個庫,作者的處理方式是將依賴的庫打包為,然后使用進行調用。它能夠在等操作系統下將源文件打包,通過對源文件打包,程序可以在沒有安裝的環境中運行,也可以作為一個獨立文件方便傳遞和管理。 起因是從某 hub 發現了一個B站掛機助手,依賴于直播的一個庫,作者的處理方式是將依賴的庫打包為 exe,然后使用 python 進行調用。 然后因為依賴的 l...
閱讀 2572·2021-09-23 11:21
閱讀 1882·2021-09-22 15:15
閱讀 970·2021-09-10 11:27
閱讀 3440·2019-08-30 15:54
閱讀 651·2019-08-30 15:52
閱讀 1335·2019-08-30 15:44
閱讀 2349·2019-08-29 15:06
閱讀 2972·2019-08-28 18:21