UV管理python环境,打包项目为docker流程

安装UV

方式一:pip安装(推荐有Python环境的用户)

bash 复制代码
pip install uv

方式二:PowerShell安装(无Python环境或需隔离安装)

默认安装(自动添加到环境变量)

bash 复制代码
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

虚拟环境创建

初始化项目自动创建环境

bash 复制代码
# 创建项目目录并初始化
mkdir my_project && cd my_project
uv init -p 3.12  # 指定Python 3.12版本

自动生成目录结构:

bash 复制代码
my_project/
├── .venv/          # 虚拟环境目录
├── pyproject.toml  # 依赖配置文件
└── uv.lock         # 依赖锁文件

显式创建虚拟环境

bash 复制代码
# 创建指定Python版本的虚拟环境
uv venv --python 3.12 .venv

# 手动激活环境
# Windows
.\.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

依赖管理与环境使用

依赖管理

bash 复制代码
# 添加依赖
uv add pandas numpy  # 自动更新pyproject.toml和uv.lock

# 更新依赖
uv add pandas --upgrade

# 删除依赖
uv remove pandas

# 同步依赖(根据pyproject.toml安装)
uv sync

环境使用

bash 复制代码
# 运行脚本(无需手动激活环境)
uv run python main.py

# 配置国内镜像源(加速下载)
# 在pyproject.toml中添加:
[[index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true

用UV安装好启动入口文件所需的依赖后,就可以直接开始打包啦,打包的Dockerfile需根据自己的需求修改(本地项目配置文件为.env,docker内部配置文件为.env.docker)

bash 复制代码
# First, build the application in the `/app` directory.

# 构建阶段:使用uv工具构建Python应用
# 设置基础镜像为uv的Python 3.12环境,并命名为builder阶段
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder
# 配置uv环境变量:启用字节码编译和使用复制链接模式
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy

# 配置uv环境变量:忽略开发依赖项
ENV UV_NO_DEV=1

# 配置uv环境变量:禁用Python下载功能
ENV UV_PYTHON_DOWNLOADS=0

# 设置工作目录为/app
WORKDIR /app
# 使用uv同步依赖项,通过缓存挂载和文件绑定优化构建过程
# --mount参数用于挂载缓存、uv.lock和pyproject.toml文件
# --no-install-project参数表示不安装项目本身,只安装依赖
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv sync --locked --no-install-project

# 复制当前目录所有文件到容器的/app目录
COPY . /app
# 再次运行uv sync以完成依赖安装
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --locked

# 生产阶段:创建最终的运行时镜像
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim

# 从构建阶段复制应用文件,并设置所有者为nonroot用户
COPY --from=builder /app /app

# 创建必要的目录
RUN mkdir -p /app/logs /app/uploads 

# 配置环境变量,将虚拟环境的bin目录添加到PATH前面
ENV PATH="/app/.venv/bin:$PATH"

# 设置工作目录为/app
WORKDIR /app

# 复制Docker专用的环境配置文件
COPY .env.docker /app/.env

# 默认启动命令:运行FastAPI应用
CMD ["python", "api/server.py"]

构建镜像前请先执行

bash 复制代码
# 重新生成 lock 文件
uv lock

构建镜像:docker build -t name-uv .

启动镜像:docker run -p 8080:8080 name-uv

查看镜像大小:docker images name-uv

相关推荐
zzwq.4 小时前
Pandas读取数据:csv、excel、sql全攻略
python·pandas
飞Link4 小时前
LangGraph SDK 全量技术手册:分布式 Agent 集群的远程调用与编排引擎
开发语言·分布式·python·数据挖掘
迷藏4944 小时前
**基于Python与OpenCV的光场显示图像处理技术实践**在现代显示技术发展中,**光场显示(Light
java·图像处理·python·opencv
枫叶林FYL4 小时前
【Python高级工程与架构实战】项目六:RAG知识库问答系统(企业文档智能)
python·深度学习·机器学习
沐苏瑶4 小时前
Java据结构深度解析:AVL 树与红黑树
数据结构·算法
feifeigo1234 小时前
MATLAB中对转子建立有限元模型并进行动力学计算
算法
ldj20204 小时前
Docker compose 安装TiDB,开发测试环境
docker·tidb
网域小星球4 小时前
C 语言从 0 入门(十九)|共用体与枚举:自定义类型进阶
c语言·开发语言·算法·枚举·自定义类型·共用体
シ風箏4 小时前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
docker·anythingllm·ollama·本地智能体·离线模型迁移
witAI4 小时前
gpt写小说工具2025推荐,助力高效创作小说
人工智能·python·gpt