开发环境
操作系统:Windows10
开发工具:PyCharm
Python版本:3.9
问题描述
当我用Pyinstaller将Python文件打包为.exe文件后,打包好的文件夹包括build、dist、spec,我将三者放置在目录Test中,然后将Test文件夹移动至桌面上,点击运行dist目录下的exe文件,发生了错误,具体错误请看下面。
具体报错代码
# 给将要打包的Tk()设置Ico
def IcoSetToTk(self, p_tk, p_icoName):
# 获得生成的ico文件的绝对路径
v_icoName = p_icoName.replace('.ico', '') + '.ico'
execPath = os.path.dirname(sys.executable)
path_1 = execPath + "\\" + v_icoName
path_1 = path_1.replace("\\", "/")
# 判断路径下ico文件是否存在
if os.path.exists(path_1):
# 对路径进行转码和解码操作
path_1 = path_1.encode("utf-8")
path_1 = path_1.decode("utf-8", "strict")
# 录入日志信息
self.__log.InLog(path_1)
# 设置Tk()的窗口图标,报错的就是下面这一行
p_tk.iconbitmap(default=path_1)
os.remove(path_1)
else:
tm.showwarning('Warning', '二进制解码生成的ico文件不存在!')
运行结果及报错内容
在桌面上运行后出现上示截图的错误,错误猜测如下:
1.在错误提示的路径下存在该文件
我有三个猜测:
(1)第一可能是路径访问权限导致的,我尝试了Python访问UAC控制权限的方法,但是网络上的教程已经不适用了,Python3.9中ctypes.windll.shell32.IsUserAnAdmin()以及ShellExcuteW()方法似乎无法使用,亦或者我还未学会如何使用;
(2)第二是资源访问冲突的问题,在根据路径读取ico文件之前我通过一个方法来创建了ico文件,但是可能存在还未创建成功之前进行访问的情况,所以我打算通过线程来验证一下(经验证该猜测Pass);
(3)第三可能是资源创建后保留在资源缓冲区,未及时写入磁盘,或许我应该在创建ico文件后执行立即写入磁盘的方法(经验证该猜测Pass)。
尝试过的方法
1.在D盘路径下可以正常运行
2.在C盘非Desktop路径下可以正常运行
我想要达到的结果
我希望用户将文件解压至Desktop上也可以正常运行