环境管理

conda

镜像源

Windows要首先运行conda config --set show_channel_urls yes生成.condarc文件。 修改.condarc文件:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/

随后运行conda clean -i 清空索引缓存,确保使用的是镜像站的索引。

查看conda安装路径

conda info --base

环境变量配置

Windows下需要手动配置环境变量,vscode才能自动搜索到conda环境,eg:

# 首先需要在环境变量中添加
# windows的环境变量可以在win键按了之后打环境变量调出来
Path=D:\Programs\Miniconda3\Scripts:D:\Programs\Miniconda3\Library\bin:D:\Programs\Miniconda3

# 随后在powershell或者cmd中执行
conda init powershell
conda init cmd.exe

# 如果遇到“因为在此系统上禁止运行脚本”
get-executionpolicy # 查看当前策略

set-executionpolicy remotesigned

一般创建和删除环境的方式

conda create -n py310 python=3.10
conda remove -n py310 --all

创建包含cudatoolkit环境的conda环境

conda create -c nvidia --name my_gpu_env python=3.8 cudatoolkit=11.6

通过yaml文件创建环境

conda env create -f environment.yml

使用某个环境跑脚本

conda run -n ${CONDA_ENV_NAME} python ./manager_spawn.py

卸载

# 先去$PROFILE目录下注释掉conda相关的环境变量。
# 然后卸载就行了。

pip

–dry-run

--dry-run 选项允许在不实际执行操作的情况下模拟 pip installpip uninstall 命令。这对于预览将要进行的更改(例如版本升级、依赖变更或卸载的包)非常有用。

常用场景

  1. 检查依赖冲突:在不破坏当前环境的情况下,查看安装新包是否会导致冲突。
  2. 预览升级版本:查看 pip install --upgrade 会将哪些包升级到什么版本。
  3. 确认卸载列表:在执行 pip uninstall 时,确认哪些包将被移除。
  4. 生成报告:配合 --report 选项生成 JSON 格式的安装报告(pip 22.2+)。

示例

# 模拟安装
pip install package_name --dry-run

# 模拟升级所有包 (Linux/Mac)
pip list --outdated --format=freeze | cut -d = -f 1 | xargs -n1 pip install -U --dry-run

# 模拟卸载
pip uninstall package_name --dry-run

# 检查 requirements.txt 安装情况
pip install -r requirements.txt --dry-run

uv

uv是一个非常高效的python包管理和项目管理器,使用Rust编写,另外uv使用的是系统安装的python,而不是自己创建的。

安装

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

常用指令

# 安装python
uv python list
uv python install 3.8

# 初始化项目
uv init <project_name>

# 初始化虚拟环境
uv venv

# venv指定版本
uv venv --python 3.8

# 添加包
uv add <package_name> 

# 从requirement.txt安装
uv pip install -r requirements.txt

# 进入虚拟环境
source .venv/bin/activate

# 安装包到当前虚拟环境
uv sync

# 安装包到系统环境
uv pip install --system -r pyproject.toml

Dockerfile案例

FROM nvidia/cuda:12.8.1-devel-ubuntu22.04 AS builder

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update -y
RUN apt install -y --no-install-recommends curl software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa && apt-get update && \
    apt install -y --no-install-recommends python3.12 python3.12-dev python3.12-venv && \
    curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12 && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1 && \
    update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip 1 && \
    rm -rf /var/lib/apt/lists/*

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

WORKDIR /workspace

COPY ./.python-version /workspace/
COPY ./pyproject.toml /workspace/
COPY ./uv.lock /workspace/

# 增加uv的缓存,避免重新编译cupy和下载torch相关的东西
RUN --mount=type=cache,target=/root/.cache/uv . /root/.local/bin/env && uv sync

FROM nvidia/cuda:12.8.1-runtime-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update -y
RUN apt install -y --no-install-recommends curl software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa && apt-get update && \
    apt install -y --no-install-recommends python3.12 python3.12-dev python3.12-venv && \
    curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12 && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1 && \
    update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip 1 && \
    rm -rf /var/lib/apt/lists/*

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

WORKDIR /workspace

COPY ./.python-version /workspace/
COPY ./pyproject.toml /workspace/
COPY ./uv.lock /workspace/
COPY --from=builder /workspace/.venv /workspace/.venv
COPY ./service.py /workspace/
COPY ./utils /workspace/utils

RUN apt update -y && apt install -y libgl1 mesa-utils && rm -rf /var/lib/apt/lists/*

COPY ./ffmpeg/bin/ /usr/bin/
COPY ./ffmpeg/libs/ /usr/lib/
COPY ./models/InspireFace/Pikachu /root/.inspireface/ms/tunmxy/InspireFace/Pikachu
COPY ./frontend.py /workspace/

CMD ["/bin/bash", "-c", ". /root/.local/bin/env && uv run service.py --config ./config.json"]