uv workspace 改造
This commit is contained in:
+21
-8
@@ -10,19 +10,32 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
|
|||||||
PYTHONUNBUFFERED=1 \
|
PYTHONUNBUFFERED=1 \
|
||||||
TZ=Asia/Tokyo
|
TZ=Asia/Tokyo
|
||||||
|
|
||||||
# 4. 复制依赖文件并安装 Python 依赖
|
# 4. 引入 uv(项目使用 uv workspace + uv.lock 管理依赖)
|
||||||
COPY requirements.txt /app/
|
COPY --from=ghcr.io/astral-sh/uv:0.10.12 /uv /usr/local/bin/uv
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
|
||||||
|
|
||||||
# 5. 安装 Playwright 的 Chromium 浏览器内核
|
# 5. 安装依赖到 /app 之外的独立 venv
|
||||||
# 虽然基础镜像自带了一些依赖,但为了确保版本匹配,建议执行 install
|
# - venv 放在 /opt/venv:docker-compose 用 `.:/app` 挂载宿主目录,
|
||||||
|
# 若 venv 落在 /app 下会被卷覆盖,故必须放到 /app 外。
|
||||||
|
# - 先只复制依赖清单与 workspace 包,最大化利用构建缓存。
|
||||||
|
# - uv sync 会按 uv.lock 安装第三方依赖,并把本地的 surugaya-common 一并装入,
|
||||||
|
# 从而修复运行时 `ModuleNotFoundError: No module named 'surugaya_common'`。
|
||||||
|
ENV UV_PROJECT_ENVIRONMENT=/opt/venv \
|
||||||
|
UV_LINK_MODE=copy
|
||||||
|
COPY pyproject.toml uv.lock ./
|
||||||
|
COPY packages ./packages
|
||||||
|
RUN uv sync --frozen --no-dev --no-install-project
|
||||||
|
|
||||||
|
# 让后续命令与运行时默认使用该 venv
|
||||||
|
ENV PATH="/opt/venv/bin:$PATH"
|
||||||
|
|
||||||
|
# 6. 安装 Playwright 的 Chromium 浏览器内核(确保与 venv 内 playwright 版本匹配)
|
||||||
RUN playwright install chromium
|
RUN playwright install chromium
|
||||||
|
|
||||||
# 6. 复制项目代码
|
# 7. 复制项目代码
|
||||||
COPY . /app/
|
COPY . /app/
|
||||||
|
|
||||||
# 7. 暴露端口
|
# 8. 暴露端口
|
||||||
EXPOSE 31106
|
EXPOSE 31106
|
||||||
|
|
||||||
# 8. 启动命令
|
# 9. 启动命令
|
||||||
CMD ["python", "-m", "app.main"]
|
CMD ["python", "-m", "app.main"]
|
||||||
|
|||||||
Reference in New Issue
Block a user