类似 pip 的包管理器,但速度比 pip 快 10 到 100 倍

虚拟环境管理器,用的就是 venv,只是可通过uv操作venv

安装

windows安装,可在Powershell通过命令行安装(以管理员权限打开)

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS/Linux安装,通过 curl 下载并执行安装脚本

curl -LsSf https://astral.sh/uv/install.sh | sh

验证是否安装成功

uv --version

使用方式

UV 不只是一个包安装器,它支持完整的 Python 项目结构和现代依赖管理流程,天然支持 pyproject.toml

1. 初始化项目

1.1. 新建项目目录,在路径输入框中输入CMD、回车,会自动打开命令行,且命令行的当前位置就是该目录

1.2. 项目初始化
uv init

由于uv会建一个.git文件,但是本机没有装git,所以出现报错,但是不影响初始化

初始化后,文件夹下会出现以下内容

1.3. 项目同步
uv sync

会生成以下两个文件:

  1. .venv,是生成python虚拟环境,python版本由pyproject.toml中的requires-python = ">=3.12"决定的
  2. uv.lock 文件,记录确切的依赖版本,确保开发与部署环境一致。无需再维护多个 *.txt 文件。

2. 项目开发

2.1. 添加依赖:

使用 uv add 安装新依赖,并自动写入 pyproject.tomluv.lock

# 示例,添加requests包
uv add requests
2.2. python版本切换:

pyproject.toml中修改 requires-python = ">=3.12" 即可,修改完后,重新输入命令,即可同步给.lock

uv sync

3. 旧项目迁移(requirements.txt 迁移

UV 支持一键导入已有依赖文件,适合旧项目迁移:

uv add -r requirements.txt 

-r 指定依赖列表

UV 会将其中的包导入至 pyproject.toml,并安装到 .venv 中。

docker部署(实践记录)

步骤:

docker是先创建镜像,再通过镜像创建运行实例(容器)

  1. 需要Dockerfile创建python程序镜像,以及运行方式
  2. 通过docker-compose.yml创建、运行容器,并指定通过Dockerfile的内容创建镜像

1. 创建Dockerfile文件:

粗暴的来说,如果是通过main.py作为运行主文件,都可以直接使用这个文件

# 使用预装了 uv 的 Python 镜像
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim

# 将项目安装到 `/app` 目录
WORKDIR /app

# 启用字节码编译
ENV UV_COMPILE_BYTECODE=1

# 由于是挂载卷,从缓存复制而不是链接
ENV UV_LINK_MODE=copy

# 确保安装的工具可以开箱即用
ENV UV_TOOL_BIN_DIR=/usr/local/bin

# 使用锁文件和设置安装项目的依赖
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 --no-dev

# 然后,添加项目的其余源代码并安装
# 与依赖分开安装可以实现最佳的层缓存
COPY . /app
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --locked --no-dev

# 将可执行文件放在环境路径的前面
ENV PATH="/app/.venv/bin:$PATH"

# 重置入口点,不调用 `uv`
ENTRYPOINT []

# 默认运行main.py的主函数
CMD ["uv", "run", "main.py"]

2. docker-compose.yml:

hefeng-api部分就是主要配置内容,后半部分主要是nginx反向代理的配置,以及服务之间通信的docker网络配置

build:  # 构建镜像的配置
      context: .  # 构建上下文为当前目录
      dockerfile: Dockerfile  # 使用当前目录下的 Dockerfile 文件
version: '3.8'  # 指定 Docker Compose 文件格式版本为 3.8

services:  # 定义服务
  hefeng-api:  # 定义名为 hefeng-api 的服务
    build:  # 构建镜像的配置
      context: .  # 构建上下文为当前目录
      dockerfile: Dockerfile  # 使用当前目录下的 Dockerfile 文件
    env_file:  # 指定环境变量文件
      - .env  # 使用当前目录下的 .env 文件
    environment:  # 设置环境变量
      - PORT=8000  # 设置 PORT 环境变量为 8000
    volumes:  # 挂载卷
      - .:/app  # 将当前目录挂载到容器的 /app 目录
    restart: unless-stopped  # 重启策略:除非手动停止,否则自动重启
    expose:  # 暴露端口(仅对链接的服务可见)
      - 8000 
    networks:  # 指定网络
      - app-network  # 使用名为 app-network 的网络

  nginx:  # 定义名为 nginx 的服务
    image: nginx:alpine  # 使用 nginx:alpine 镜像
    ports:  # 端口映射
      - "80:80"  # 将主机的 80 端口映射到容器的 80 端口
    volumes:  # 挂载卷
      - ./nginx.conf:/etc/nginx/nginx.conf  # 将当前目录下的 nginx.conf 文件挂载到容器的 /etc/nginx/nginx.conf

    depends_on:  # 依赖关系
      - hefeng-api  # 依赖 hefeng-api 服务
    networks:  # 指定网络
      - app-network  # 使用名为 app-network 的网络

networks:  # 定义网络
  app-network:  # 定义名为 app-network 的网络
    driver: bridge  # 使用 bridge 驱动
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐