虚拟环境是一个我们自己在计算机上创造出来的环境,有点像虚拟机之于主机(但是虚拟环境并未隔离操作环境),它就像是在一个大别墅(操作系统)里面开了一个小房子,有自己独立 pip 包等等,而在python项目工程实践中,虚拟环境是非常重要的,它可以避免第三方包污染解释器并且在 Linux 环境下成功进行开发(如果你是一个对 Linux 比较熟悉的人,会发现,在部分 Linux 发行版(如较新的 Debian/Ubuntu)里,系统 Python 受 PEP 668 保护,直接 pip install 会被拒绝,这个时候最规范的做法就是开一个虚拟环境了),而且很多人会发现,有些包在全局环境变量下是不会自动加载进 PATH 变量里的,而激活 venv 的时候会自动将 Scripts\ 加载进 PATH 里面,使得你可以直接敲 django-admin 、 black 等等命令而不需要使用 python -m。

venv环境管理器

我们在python里开虚拟环境,主要是靠这样一行命令。

python -m venv .venv

这个命令会在当前目录下创建一个.venv文件夹,并自动在其中配置好虚拟环境所需要的一切,在这之后,你只需要

Windows

.venv\Scripts\Activate.ps1

WSL

source .venv/Scripts/activate

Linux

source .venv/bin/activate

虚拟环境就被激活了,之后你就可以通过pip等命令安装这个虚拟环境所需要的包了。

当然,如果你嫌麻烦,又恰好是一名pycharm使用者(当然笔者并不是很推荐使用pycharm,原因很简单,pycharm太厚重了,启动速度比vscode慢一截,导致我体验感很差,但是如果你的电脑配置很高就无需考虑这些),你可以在pycharm右下角的interpreter配置当中设置,Add interpreter的时候有一个Type选项, 在其中选择Virtualenv,这样每次开启pycharm时,其自带的终端就会自动进入虚拟环境。

当然,对于vscode的使用者,我们也有一套方案,并且可以说比pycharm的方案更加简便:在你安装了 Python 扩展之后,你只需要打开命令面板,输入Python: Create Environment,配置好基本的解释器版本和依赖安装之后,然后在 Settings 里把 python.useEnvironmentsExtension 勾上, Ctrl+Shift+P → Developer: Reload Window 重载后在侧边栏的python视图里面可以看到有Environment Managers ,点+号直接创建,后续和pycharm就一样可以直接进入虚拟环境了。

环境与包管理器

虚拟环境固然方便,但是当我们开发时间长了之后,未免会发现一边使用 venv 来管理虚拟环境,一边使用 pip 来管理包太过于繁琐了,所以程序员们研究出了一个环境管理和包管理器的集合体。

常用的环境与包管理器有conda、uv等等,在这里我比较推荐uv,和前面原因差不多,conda是一个非常重量级的环境与包管理器(不过,可能conda的开发者也意识到了这一点,所以有 micromamba 作为更加轻量的替代方案),当然,还是会有不少人用到它的,例如研究数据科学和机器学习的人们,但是如果你进行的是一般的后端项目开发,uv是足够了的。

uv的安装方法非常简单:

pipx install uv

当然,如果你阅读过官方手册,会发现它更推荐另一种更加复杂的安装方式:

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

当然,pip install uv 也是一种安装方式,但是他会污染当前解释器环境,所以不推荐。

以上都是命令行的安装方法,对于更喜欢图形化界面的大家,pycharm 和 vscode 也分别提供了一种解决方案。

如图,pycharm可以在这个界面选择 install uv via pip 进行 uv 的安装。

VS Code 装好 uv 后会在后台自动用它来加速建环境和装包,无需(很遗憾的是,也不能)在 GUI 里单独选 uv。

接下来介绍一下uv的使用方法。

uv init myproj        # 建项目
uv add requests       # 加依赖(自动建/更新 .venv 和 uv.lock)
uv add --dev pytest   # 开发依赖
uv sync               # 按锁文件同步环境
uv run main.py        # 在项目环境里跑
uv lock --upgrade     # 升级锁定版本

当然,uv 官方还做了对 pip 的兼容层优化。

uv venv                       # 建裸 venv
uv pip install requests       # 和 pip 安装包没有区别
uv pip list
uv python install 3.12        # 装指定 Python 版本
uv python pin 3.12

这就是基本的uv使用方法了,后续更加高阶的用法读者可以自己查阅官方手册,本博客只做介绍引入。

然后是基本的conda的安装和使用方法(建议初学者安装 miniconda,而不是 anaconda):

conda create -n myenv python=3.12
conda activate myenv
conda install numpy
conda install -c conda-forge somepkg
conda env list
conda deactivate
conda remove -n myenv --all

顺便一提,conda 相对于 uv 更具优势的一点是它不止于 python,而适配于多个语言。