在使用pyinstaller 打包 py文件后,双击生成的.exe文件总是报错Failed to execute script main。
重新打包时去掉 -w 获取到报错信息,发现是打开图片失败。
于是第一次尝试
使用相对文件路径,如:"./imgs/3.jpg"
再次打包后还是运行失败。
第二次尝试
使用绝对路径,如:r"C:/Users/xxx/Desktop/bianxing/imgs/3.jpg"
,结果可以顺利打包并执行,但是想将生成的.exe文件分享给小伙伴时,又出错啦!!!
原来是当图片加载路径写成绝对路径时,运行exe文件会按照路径去寻找图片,按照你的文件路径在别人的电脑上执行肯定要出错了。
第三次尝试
使用拼接式的绝对路径(按照自己的理解起的名字)
使用 os.path.split(os.path.realpath(__file__))[0] + r"\imgs\3.jpg"
,打包后将imgs文件夹直接复制到dist文件目录下,因为运行exe文件时os.path.split(os.path.realpath(__file__))[0]
获取的文件路径是生成的.exe文件的路径。然后运行成功,然后将dist文件直接压缩发给小伙伴,然后小伙伴解压缩后点击exe文件顺利执行。
如下有几种获取文件路径的方式可供参考
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])
执行结果如下:
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__)))) # 项目根目录向前推进两层
print(os.path.dirname(os.path.dirname(__file__))) # 项目根目录向前推进一层
print(os.path.dirname(__file__)) # # 项目根目录
注:
本人第一次使用pyinstaller ,如果有大佬了解其他解决文件路径的方法,欢迎评论,不胜感激。