python打包成exe后在不同目錄執行閃退問題分析與解決
當我們將python腳本打包成exe文件后,可能會遇到一個棘手的問題:在打包生成的目錄中執行exe文件正常,但在將其移動到其他目錄執行時,exe文件會閃退且不生成日志文件。這個問題到底是什么原因導致的呢?讓我們深入探討一下這個問題以及解決方案。
問題描述
代碼的主要功能是通過定時任務從源數據庫中提取數據,然后將其插入到目標數據庫中。代碼已經在pycharm中成功運行,并能正常打印日志。但是,當使用pyinstaller命令打包成exe文件后,雖然在打包生成的目錄中執行正常,但在將其復制到其他目錄執行時,exe文件會立即閃退,且不生成任何日志文件。
問題分析
經分析,問題可能出在日志配置上。當exe文件在其生成目錄中運行時,日志文件sync22.log可以正常寫入。但當exe文件被移動到其他目錄時,程序可能無法找到日志文件的路徑,從而導致程序在嘗試寫入日志時崩潰。
解決方案
為了解決這個問題,我們需要修改日志配置,使其能夠在任何目錄下運行exe文件時都能正確找到日志文件的路徑。我們可以通過獲取exe文件的當前目錄來動態設置日志文件的路徑。
以下是解決方案中的關鍵代碼:
立即學習“Python免費學習筆記(深入)”;
import os import sys <h1>獲取exe所在目錄并設置日志路徑</h1><p>if getattr(sys, 'frozen', False):</p><h1>打包后的exe路徑</h1><pre class="brush:php;toolbar:false">exe_dir = os.path.dirname(sys.executable)
else:
腳本運行路徑
exe_dir = os.path.dirname(os.path.abspath(__file__))
os.makedirs(exe_dir, exist_ok=True) log_path = os.path.join(exe_dir, ‘sync22.log’)
日志配置
Logging.basicConfig( filename=log_path, level=logging.INFO, format=’%(asctime)s – %(levelname)s – %(message)s’ )
通過這段代碼,我們確保無論exe文件在哪個目錄下運行,都能正確找到并寫入日志文件,從而避免程序因找不到日志路徑而閃退的問題。