diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..77744db --- /dev/null +++ b/.dockerignore @@ -0,0 +1,47 @@ +# 版本控制 +.git +.gitignore +.github + +# Python 缓存与构建产物 +__pycache__ +*.pyc +*.pyo +*.pyd +*.egg-info +*.egg +dist +build +.eggs + +# 测试与覆盖率 +.pytest_cache +.coverage +htmlcov +.tox +coverage.xml + +# 虚拟环境 +.venv +venv +env + +# 工具缓存 +.uv-cache +.ruff_cache +.pyrefly_cache +.mypy_cache + +# IDE 与编辑器 +.idea +.vscode +*.swp +*.swo + +# 文档与示例(按需保留) +docs +examples + +# 系统文件 +.DS_Store +Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e642082 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +# 使用国内镜像源拉取基础镜像 +# 备选镜像源前缀:docker.1ms.run / dockerpull.com / docker.xuanyuan.me +FROM docker.m.daocloud.io/python:3.13-slim + +# 环境变量:非交互 + 路径配置 +ENV DEBIAN_FRONTEND=noninteractive \ + LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 \ + UV_LINK_MODE=copy \ + UV_CACHE_DIR=/uv-cache \ + UV_PYTHON_INSTALL_DIR=/uv-python \ + UV_PROJECT_ENVIRONMENT=/opt/venv \ + PATH="/opt/venv/bin:${PATH}" + +# 配置 apt 国内镜像(阿里云)并安装系统依赖 +RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + git \ + jq \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# 配置 pip 国内镜像(阿里云) +RUN mkdir -p /etc/pip \ + && printf '[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com\n' \ + > /etc/pip/pip.conf \ + && mkdir -p /root/.config/pip \ + && ln -sf /etc/pip/pip.conf /root/.config/pip/pip.conf + +# 安装 uv 并预装 Python 3.8 / 3.13 +RUN pip install --no-cache-dir uv -i https://mirrors.aliyun.com/pypi/simple/ \ + && uv python install 3.8 3.13 + +# 预装项目 dev 依赖(仅复制依赖描述文件,利用 Docker 层缓存) +WORKDIR /workspace +COPY pyproject.toml tox.ini README.md ./ +COPY src/ ./src/ + +# 同步依赖到 /opt/venv(CI 时直接复用) +RUN uv sync --frozen --no-install-project 2>/dev/null || uv sync --no-install-project + +# 预装 tox 环境(py38 + py313) +RUN uvx tox run -e py38,py313 --notest 2>/dev/null || true + +# 持久化 uv 缓存目录(CI 可挂载到宿主机加速) +VOLUME ["/uv-cache"] + +# 默认入口 +CMD ["/bin/bash"]