在使用pyinstaller 打包 py文件后乓旗,雙擊生成的.exe文件總是報錯Failed to execute script main嗤攻。
重新打包時去掉 -w 獲取到報錯信息,發(fā)現(xiàn)是打開圖片失敗袱饭。
于是第一次嘗試
使用相對文件路徑川无,如:"./imgs/3.jpg"
再次打包后還是運(yùn)行失敗。
第二次嘗試
使用絕對路徑虑乖,如:r"C:/Users/xxx/Desktop/bianxing/imgs/3.jpg"
懦趋,結(jié)果可以順利打包并執(zhí)行,但是想將生成的.exe文件分享給小伙伴時疹味,又出錯啦=鼋小!佛猛!
原來是當(dāng)圖片加載路徑寫成絕對路徑時惑芭,運(yùn)行exe文件會按照路徑去尋找圖片,按照你的文件路徑在別人的電腦上執(zhí)行肯定要出錯了继找。
第三次嘗試
使用拼接式的絕對路徑(按照自己的理解起的名字)
使用 os.path.split(os.path.realpath(__file__))[0] + r"\imgs\3.jpg"
遂跟,打包后將imgs文件夾直接復(fù)制到dist文件目錄下,因?yàn)檫\(yùn)行exe文件時os.path.split(os.path.realpath(__file__))[0]
獲取的文件路徑是生成的.exe文件的路徑婴渡。然后運(yùn)行成功幻锁,然后將dist文件直接壓縮發(fā)給小伙伴,然后小伙伴解壓縮后點(diǎn)擊exe文件順利執(zhí)行边臼。
如下有幾種獲取文件路徑的方式可供參考
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])))
print(os.path.split(os.path.realpath(__file__))[0])
執(zhí)行結(jié)果如下:
C:\Users\xxx\Desktop\bian
C:/Users/xxx/Desktop/bian/a.py
C:\Users\xxx\Envs\520\Scripts
C:\Users\xxx\Desktop\bian
C:\Users\xxx\Desktop\bian
print(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) # 項(xiàng)目根目錄向前推進(jìn)兩層
print(os.path.dirname(os.path.dirname(__file__))) # 項(xiàng)目根目錄向前推進(jìn)一層
print(os.path.dirname(__file__)) # # 項(xiàng)目根目錄
注:
本人第一次使用pyinstaller ,如果有大佬了解其他解決文件路徑的方法哄尔,歡迎評論,不勝感激柠并。