Загрузчик файлов Streamlit возвращает 400 неверных запросов при развертывании в модальном режиме (работает локально)Python

Программы на Python
Anonymous
 Загрузчик файлов Streamlit возвращает 400 неверных запросов при развертывании в модальном режиме (работает локально)

Сообщение Anonymous »

У меня есть приложение Streamlit, которое отлично работает на моем локальном компьютере, но выдает ошибку
400 Bad Request при развертывании в модальном (бессерверном контейнере).
Вот соответствующая настройка:
streamlit_app.py

Код: Выделить всё

import streamlit as st
from ultralytics import YOLO
import tempfile, os
from dotenv import load_dotenv

load_dotenv("/root/.env")

os.environ["TMPDIR"] = "/tmp"
tempfile.tempdir = "/tmp"

st.title("🦺 PPE Detection App")

uploaded_file = st.file_uploader("Upload an image", type=["jpg", "png"])
if uploaded_file:
temp_path = os.path.join(tempfile.gettempdir(), uploaded_file.name)
with open(temp_path, "wb") as f:
f.write(uploaded_file.read())

model = YOLO("/root/best.pt")
results = model.predict(source=temp_path, save=True, project="/tmp", name="detections")
st.success("✅ Detection complete!")
modal_app.py:

Код: Выделить всё

import modal, shlex, subprocess
from pathlib import Path

image = (
modal.Image.debian_slim(python_version="3.12")
.apt_install("libgl1", "libglib2.0-0", "ffmpeg")
.uv_pip_install("streamlit", "ultralytics", "opencv-python", "supabase", "python-dotenv")
.add_local_file("src/streamlit_app.py", "/root/streamlit_app.py")
.add_local_file("../.env", "/root/.env")
)

app = modal.App(name="ppe-detection", image=image)

@app.function()
@modal.web_server(8000)
def run():
subprocess.Popen(
"streamlit run /root/streamlit_app.py --server.port 8000 --server.enableCORS=false",
shell=True,
)
Когда я загружаю даже небольшое (46 КБ) изображение, в журнале отображается:

Код: Выделить всё

PUT /_stcore/upload_file// -> 400 Bad Request
Что я пробовал:
  • Проверил, что работает локально при запуске с потоковым запуском.
  • Установите os.environ["TMPDIR"] = "/tmp" и обеспечьте вывод YOLO в /tmp.
  • Подтверждено, что .env и вес модели загружаются правильно.
  • Добавлены разрешения на запись для /tmp внутри модала.
Тем не менее, загрузка постоянно завершается с ошибкой 400 Bad Request.
Как я могу успешно использовать st.file_uploader() при развертывании Modal?
Ограничивает ли Modal загрузку файлов через внутренний API Streamlit или мне нужно настроить временный каталог Streamlit по-другому?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... odal-works

Вернуться в «Python»