У меня есть небольшое приложение Flask, которое использует временный каталог Python для создания zip-файла и его возврата клиенту.Фрагмент кода выглядит следующим образом:
import tempfile, os, shutil
def process():
with tempfile.TemporaryDirectory(dir=os.getcwd()) as tmpdir:
with tempfile.TemporaryDirectory(dir=tmpdir) as wrapper_dir:
#some processing
zipfile = shutil.make_archive("azipfile", "zip", wrapper_dir)
return send_file(zipfile, mimetype="zip", attachment_filename="azipfile.zip", as_attachment=True)
Он вложит 2 временных каталога, заархивирует внутренний каталог и отправит заархивированный файл пользователю.Если я запускаю приложение на своем компьютере локально, оно ведет себя как положено и не оставляет никаких каталогов или файлов, так как и диспетчер контекста, и файл tempfile должны были хорошо очиститься после обработки zip-файла.
Однако, когда я запускаю это на PythonAnywhere, он выдаст эту ошибку:
OSError: [Errno 39] Directory not empty: '/home/{user}/{app}/{tempdirectory}'
Логически, ошибка имеет смысл, так как временный каталог все еще содержит zip-файл, но почему есть разница в поведениизапустить его в производстве по сравнению с местным?