Как удалять временную папку, которая создаётся от pyinstaller

Рейтинг: 2Ответов: 1Опубликовано: 11.08.2023

Я написал скрипт и скомпилировал его с помощью pyinstaller.

Этот скрипт бесконечно работает в фоне.

Мне нужно сделать так, что бы временная папка, которая создаётся при запуске exe файла, удалялась после завершения скрипта.

from keyboard import add_hotkey
from os import startfile


def start():
    startfile(r'C:\Users\neptu\AppData\Local\Discord\app-1.0.9016\Discord.exe')


add_hotkey('ctrl+alt+8', start)

while True:
    pass

При запуске exe файла (скомпилированного с помощью pyinstaller) создаётся временная папка. Я хочу её удалять после закрытия скрипта, но не знаю как это сделать в коде (что бы удалить папку, я использую shutil.rmtree, но я не знаю куда это прописать в коде)

Ответы

▲ 4Принят

Вы можете использовать модуль atexit для регистрации функции обратного вызова, которая будет вызываться при завершении работы программы и удалит временную папку.

Пример кода:

import atexit
import os
import shutil
from keyboard import add_hotkey
from os import startfile


def start():
    startfile(r'C:\Users\neptu\AppData\Local\Discord\app-1.0.9016\Discord.exe')


def cleanup_temp_folder():
    temp_folder = getattr(sys, '_MEIPASS', os.path.abspath('.'))
    temp_path = os.path.join(temp_folder, '_MEI')
    shutil.rmtree(temp_path)


add_hotkey('ctrl+alt+8', start)

atexit.register(cleanup_temp_folder)

while True:
    pass

В этом примере функция cleanup_temp_folder() использует shutil.rmtree для удаления временной папки, которая создается pyinstaller во временном каталоге системы. Функция cleanup_temp_folder() затем зарегистрирована в модуле atexit с помощью atexit.register(), чтобы быть вызванной при завершении программы.

Обратите внимание, что sys._MEIPASS используется для получения временной папки, созданной при запуске скомпилированного exe-файла с помощью pyinstaller. Надеюсь дядя Nymos вам помог! Итак, дядя Nymos увидел твою просьбу и готов помочь.

Чтобы удалить временную папку после завершения скрипта, вы можете использовать блок try/finally, чтобы гарантировать выполнение кода удаления даже в случае возникновения исключения. Вставьте этот код в нужное место вашего скрипта:

import shutil
import atexit

temp_folder = '<путь к временной папке>'

def remove_temp_folder():
    shutil.rmtree(temp_folder, ignore_errors=True)

# Зарегистрировать функцию удаления временной папки
atexit.register(remove_temp_folder)

# Ваш код иллюстрирующий бесконечное выполнение
while True:
    pass

Замените <путь к временной папке> на путь к созданной временной папке при запуске exe-файла. Функция remove_temp_folder использует shutil.rmtree для удаления папки и всех ее содержимого. Функция будет вызвана автоматически при завершении скрипта.

Чтобы убедиться, что все работает внутри exe-файла, удостоверьтесь, что путь к временной папке правильно указан и скомпилированный exe-файл находится в той же директории, что и временная папка.