使用Pyinstall -f -w 打包文件时,最后出现PermissionError: [Errno 13] Permission denie 问题。截图如下:
问题分析:
1、 问题提示:
在文件 "F:\myPythonProject\venv\lib\site-packages\PyInstaller\utils\win32\winutils.py", 第178行, 调用 with open(exe_path, 'wb') as fp打开文件时,发现文件被占用PermissionError: [Errno 13] Permission denied:
2、解决思路:关闭被占用的文件即可。
3、解决方法:
(1)撰写函数。如果文件被占用,则关闭文件句柄。
import win32file
def file_occupied(file_name): # occupied:占用
# 自己加的模块,防止出现错误:PermissionError: [Errno 13] Permission denied:exe_path
# 如果检测到文件被占用,则关闭该文件句柄
try:
fp = open(file_name,'wb')
except:
vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None,win32file.OPEN_EXISTING,win32file.FILE_ATTRIBUTE_NORMAL, None)
win32file.CloseHandle(vHandle)
else:fp.close()
(2)打开并编辑F:\myPythonProject\venv\lib\site-packages\PyInstaller\utils\win32\winutils.py文件,添加file_occupied()函数
(3)文件中查找“with open(exe_path, 'wb') as fp:”语句,在每个语句之前调用函数:
file_occupied(exe_path)。如下图:
# Rewrite the exe
file_occupied(exe_path)
with open(exe_path, 'wb') as fp:
fp.write(data)
(4)保存文件,重新运行打包命令。
(5)至此,完美解决 PermissionError: [Errno 13] Permission denie 问题