很多刚开始学 Python 的鱼油,第一次安装第三方库时,通常会直接输入:然后发现代码能跑,就觉得这样没问题。确实,这样确实没啥问题但随着我们写的项目越来越多,什么爬虫、Flask 网站、数据分析、自动化脚本等等……你就会慢慢意识到一个问题:所有项目都在共用同一套 Python 库。这就像我们把所有课程的书、所有工具、所有杂物都堆在同一个桌子上。刚开始东西少,还能凑合着玩耍,时间久了,桌子越来越乱,除了看着烦之外,它们之间还会互相影响。那么 Python 的虚拟环境,就是专门用来解决这个问题的!我们可以将虚拟环境理解成:
给每个 Python 项目单独准备的一个 “小房间”。
这样,每个项目都有了自己的房间。
每个房间里放着:这个项目需要的 Python 解释器、第三方库和相关工具。
小甲鱼知道,对初学者来说,虚拟环境看起来像是 “多此一举”。
下面我列举几个原因,你们就明白虚拟环境的重要性了!
一、防止不同项目之间的互相影响假设我们有一个旧的项目,它依赖某个库的旧版本。后来在做其他新项目时,把这个库升级到了新的版本。这时候,旧的那么项目可能就会突然跑不起来了。这类问题对新手来说很烦,因为报错看起来不像是 “版本冲突”,可能只是突然提示某个函数不存在、某个参数不能用了。你刚开始可能会以为是自己代码写错了,但其实搞到最后发现只是因为依赖库的版本变了。没错,这时候使用虚拟环境就直接从根源上避免了这种麻烦。每个项目都有自己的小房间,自己管理自己所需的库,谁也不影响到谁。二、方便别人运行我们的项目如果你把项目发给朋友,或者上传到 GitHub,别人拿到代码后会问:这个项目到底需要安装哪些库?如果我们没有记录依赖,对方只能边运行边报错,缺什么装什么,这样就非常麻烦……但如果我们使用虚拟环境,并且生成一个依赖文件(requirements.txt)别人只需要直接运行下面命令:pip install -r requirements.txt
一次性把项目所需要的库安装稳妥。这就是为什么很多 Python 项目里都会有 requirements.txt 文件。三、让你的电脑更干净如果我们将所有库都装到全局 Python 里,时间久了,全局环境会变得很乱。届时我们可能都不知道哪些库是哪个项目用的。有些库已经没用了,但还保留在电脑里。有些库的版本很旧了,但我们既不敢删,又不敢乱升级,因为鬼知道之后某个项目会不会突然就不能运行了……所以,虚拟环境在这里的好处是:当一个项目不要了,可以直接删除其虚拟环境即可,一点儿都不会影响到其他项目和系统主环境!或者如果一个虚拟环境坏了,我们想重建的话,很多时候只需要直接删掉 .venv,然后重新创建就可以了。下面我们正式开始操作。
我们先在桌面创建一个项目文件夹,叫 FishC
然后打开终端,然后进入到这个项目文件夹中:
在大多数情况下,创建虚拟环境只需要一个命令:
如果是 macOS 或 Linux 系统,命令需要写成:
venv 就是 Python 官方提供的虚拟环境工具。
.venv 表示要创建的虚拟环境的名字。
这个名字可以自定义,但一般保持 .venv 即可,因为很多编辑器会默认识别 .venv。
创建成功后,我们的项目目录大概会变成这样:
FishC|-- .venv|-- main.py
.venv 就是我们的虚拟环境文件夹。
一般不需要手动改 .venv 里面的文件。
它里面会保存这个虚拟环境自己的 Python、pip 以及后面安装的第三方库。
虚拟环境创建好之后,并不会默认开启。
我们必须要先激活它,然后才能使用!
激活的意思就是告诉当前终端:接下来的操作,请使用这个项目自己的 Python 环境。
不同系统的激活命令不一样。
Windows PowerShell
如果使用的是 Windows PowerShell,输入:
.\.venv\Scripts\Activate.ps1
如果提示这个:
这不是你的问题,也不是小甲鱼的问题,这是 PowerShell 的执行策略阻止了脚本运行……

只需要执行这个语句:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
然后重新激活虚拟环境即可:
激活成功的标志就是命令行前面多了个(.venv)
Windows CMD
如果使用的是传统 CMD,输入:
.\.venv\Scripts\activate.bat
macOS / Linux
如果使用的是 macOS 或 Linux,输入:
source .venv/bin/activate
激活虚拟环境之后,我们再安装第三方库,就会直接到安装到 .venv 文件夹里面。
让我们来测试一下:
python -m pip install requests
看,现在 Requests 库就直接安装在我们的项目文件夹中了:
我们也可以使用这个命令来列举当前环境中安装了哪些东东(以及它们相应的版本):
发现,明明只安装了 requests,为什么多了好几个包?
这是正常的。
因为 requests 自己也依赖其他包。
当你安装 requests 时,pip 会自动把它需要的依赖也一起装好。
为我们的项目生成 requirements.txt虚拟环境解决了 “当前项目怎么管理包” 的问题。
但还有一个问题:
如果别人要运行我的项目,怎么知道要装哪些包?
这时候就需要生成一个依赖文件,也就是 requirements.txt
生成这个,我们只需要在虚拟环境激活的状态下运行:
python -m pip freeze > requirements.txt
这个命令会把当前环境中的包和版本写进 requirements.txt 文件。
生成后,项目目录可能变成这样:
FishC|-- .venv|-- main.py|-- requirements.txt
打开 requirements.txt,里面大概长这样:
certifi==2026.5.20charset-normalizer==3.4.7idna==3.17requests==2.34.2urllib3==2.7.0
这个文件的作用就像一张清单。
它告诉别人:
运行这个项目,需要安装这些包,而且最好安装这些版本。
假设你的朋友拿到了你的项目。
他不需要你的 .venv 文件夹。
他只需要:
创建自己的虚拟环境;
激活虚拟环境;
根据 requirements.txt 安装依赖。
安装依赖使用这个命令:
python -m pip install -r requirements.txt
这样,他的电脑上也会安装一套和你项目类似的依赖环境。
一般不要!!
因为 .venv 文件夹通常很大,而且里面的内容和你的操作系统、Python 路径有关。
比如你在 Windows 上创建的 .venv,别人用 macOS,不一定能直接用。
所以正确做法是:
不发 .venv,只发代码和 requirements.txt。
如果是使用 Git,可以在项目里创建一个 .gitignore 文件,然后写入:
这样 Git 就不会把 .gitignore 上传上去了。
当我们不再写这个项目时,就可以退出虚拟环境。
命令很简单:
退出后,终端前面的 (.venv) 一般会消失。