pyinstaller打包python(py)腳本爲exe文件時的坑(os和sys)

今天寫了一個簡單的批處理腳本,爲了給沒有環境的同事用,通過pyinstaller -F xxx.py進行打包成可執行的單個exe文件

py文件在調試的時候一切正常,但是打包成exe文件以後,運行出現一閃而退的現象。最後通過cmd命令 .\xxx.exe的方式,發現出現WinError 123錯誤,通過排查,發現pyinstaller打包後,os.path、sys.path爲空,或者會是一些想不到的值,肯定會有其原理,但是這裏沒有深究。

可以自行打包測試如下代碼:

import sys
import os
print(sys.path[0])
print(sys.argv[0])
print(os.path.dirname(os.path.realpath(sys.executable)))
print(os.path.dirname(os.path.realpath(sys.argv[0])))
————————————————
版權聲明:本文爲CSDN博主「買菇涼的小火披」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_31801903/article/details/81666124

運行exe後出現的異常

下面放上問題代碼。

import os
import sys
import shutil
import time

#%%
#獲取當前路徑下所有文件夾
#os.path.abspath(__file__)

#1.獲取當前文件所在路徑
now_path = os.path.abspath(__file__)

print(now_path)
#切換工作路徑到當前的空間
os.chdir(now_path)

#顯示文件夾名
folders_path = os.listdir()
#判斷文件數量,篩選獲取只有1個文件的文件路徑
#folder_name_noly_one = []
#%%
for i in folders_path:
    path = now_path + '\\' + i
    if os.path.isdir(i) and len(os.listdir(i)) == 1:
        file_path = path + '\\' + os.listdir(i)[0]
        #os.path.abspath(os.listdir(i))
        #i = os.path.abspath(os.listdir(i))
        #folder_name_noly_one.append(i)
        shutil.move(file_path,now_path)
        os.rmdir(path)
    else:
        continue

print('運行完成!')
time.sleep(5)
#將其內部文件剪切出來

最後修改後的代碼

#%%
import os
import sys
import shutil
import time
import tkinter as tk
from tkinter import filedialog
#%%
#獲取當前路徑下所有文件夾
#os.path.abspath(__file__)

#1.獲取當前文件所在路徑
now_path = filedialog.askdirectory()

print(now_path)
#切換工作路徑到當前的空間
os.chdir(now_path)

#顯示文件夾名
folders_path = os.listdir()
#判斷文件數量,篩選獲取只有1個文件的文件路徑
#folder_name_noly_one = []
#%%
for i in folders_path:
    path = now_path + '\\' + i
    if os.path.isdir(i) and len(os.listdir(i)) == 1:
        file_path = path + '\\' + os.listdir(i)[0]
        #os.path.abspath(os.listdir(i))
        #i = os.path.abspath(os.listdir(i))
        #folder_name_noly_one.append(i)
        shutil.move(file_path,now_path)
        os.rmdir(path)
    else:
        continue

print('運行完成!')
time.sleep(5)
#將其內部文件剪切出來



#刪除空文件夾

# %%

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章