Все работает хорошо.
Теперь я пытаюсь переключиться с PIP на UV.
Контейнер сборка без проблем и показ всех пакетов внутри, но когда я пытаюсь запустить этот контейнер - приложение не видит библиотеки.
Мой файл Dockerfile выглядит так:
Код: Выделить всё
FROM python:3.9
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
COPY . .
RUN uv venv --python 3.9 && uv sync --frozen
EXPOSE 5100
CMD ["python", "app.py"]
Код: Выделить всё
[project]
name = "bgrm"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
"flask>=3.1.0",
"pillow>=9.3.0",
"rembg==2.0.30",
]
Код: Выделить всё
2024-12-14 23:11:35 Traceback (most recent call last):
2024-12-14 23:11:35 File "/app/app.py", line 3, in
2024-12-14 23:11:35 from flask import Flask, render_template, request, send_file
2024-12-14 23:11:35 ModuleNotFoundError: No module named 'flask'
В Flask на основе PIP находятся следующие местоположения:
Код: Выделить всё
/app/.venv/lib/python3.9/site-packages/flask-3.1.0.dist-info/METADATA
/app/.venv/lib/python3.9/site-packages/flask-3.1.0.dist-info/RECORD
/usr/local/lib/python3.9/site-packages/flask-3.1.0.dist-info/METADATA
/usr/local/lib/python3.9/site-packages/flask-3.1.0.dist-info/RECORD
Код: Выделить всё
/app/.venv/lib/python3.9/site-packages/flask-3.1.0.dist-info/METADATA
/app/.venv/lib/python3.9/site-packages/flask-3.1.0.dist-info/RECORD
Понятия не имею, что не так.
Обновление:
Это утром я нашел решение. И мне кажется, я даже понимаю, почему это работает именно так.
Я прочитал несколько старых руководств по запуску venv в Docker.
Затем изменил Docker вот так:
CMD [.venv/bin/ python", "app.py]
Почему это работает:
- uv создает папку .venv по умолчанию
УФ-сканер для интерпретаторов Python и найдите 3.9 - интерпретатор uv pin 3.9 для venv
- библиотеки синхронизации uv с .venv
- когда я запускаю команду с обычным Python - библиотек нет
Подробнее здесь: https://stackoverflow.com/questions/792 ... -see-those
Мобильная версия