Python虚拟坏境
一.虚拟环境的概念
Python虚拟环境(Virtual Environment)是一个独立的、隔离的Python运行环境。
可以把它理解为为某个项目专门创建的“沙盒”或“小房间”。
在这个“小房间”里,有属于它自己的Python解释器、pip包管理器以及独立的第三方库目录。
并且你可以在一台机器上为不同的项目创建多个不同的虚拟环境,而且各个虚拟环境之间互不干扰。
二.为什么需要虚拟环境
在Python开发中,如果不使用虚拟环境,则所有的第三方库都会安装在系统的全局Python环境中,这可能会带来一下隐患问题或痛点,而使用虚拟环境就可以避免:
1.解决依赖冲突
假设电脑上同时有两个项目,项目A需要Django2.2,而项目B需要Django3.2,如果在全局环境中安装,那么后安装的版本会覆盖掉前一个安装的版本,导致其中一个项目崩溃(版本冲突了)。虚拟环境可以为它们各自提供隔离的空间。
2.保持系统环境整洁
避免系统全局的Python环境被各种项目的依赖“污染”,防止因某个项目的依赖问题导致系统工具不可用。
3.方便团队协作与环境复现
通过导出requirements.txt依赖清单,团队成员可以在不同的机器上精确重建出完全一致的开发环境,消除“在我的机器上可以运行但是在你的机器上运行不了的尴尬局面“。
4.权限安全
在虚拟环境中安装包不需要管理员(root)权限,降低了系统安全风险。
三.了解pip
1.概述
pip是Python官方推荐的包管理工具(Package Installer For Python),可以把它通俗地理解为Python的“应用商店”。
在Python的生态系统中,除了自带的标准库,还有数以万计由全球开发者贡献的第三方库(如处理数据的pandas、发送网络请求的第三方库requests、做Web开发的flask等等)。pip的核心作用就是简化这些第三方库的安装、升级、卸载以及依赖关系管理。
2.核心作用
1.安装第三方包
从Python包索引PyPI(一个拥有超400万包的在线仓库)下载并安装你需要的库
2.版本控制
支持安装特定版本的包,或者指定一个兼容版本的范围,防止版本更新导致代码崩溃
3.自动处理依赖
当你安装一个库时,如果它还需要其他的库作为底层依赖,pip会自动帮你把依赖项自动安装好
4.升级与卸载
可以轻松将包升级到最新版本,或者安全地卸载不需要的包
3.常用命令
1.安装与卸载
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 安装包 | pip install <包名> |
安装最新版本 |
| 安装指定版本 | pip install <包名>==1.0.4 |
精确安装某个版本 |
| 升级包 | pip install --upgrade <包名> |
将包升级到最新版本 |
| 卸载包 | pip uninstall <包名> |
卸载已安装的包 |
| 从文件批量安装 | pip install -r requirements.txt |
常用于一次性搭建项目环境 |
2.查看与搜索
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 列出所有包 | pip list |
查看当前环境所有已安装的包 |
| 查看包信息 | pip show <包名> |
查看指定包的版本、依赖、安装位置等 |
| 检查可升级的包 | pip list --outdated |
列出所有有可用更新的包 |
| 生成依赖清单 | pip freeze > requirements.txt |
将当前环境的包列表导出为文件 |
| 搜索包 | pip search <关键词> |
在PyPI仓库中搜索包 |
3.高级与辅助
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 安装到用户目录 | pip install --user <包名> |
为当前用户安装,无需管理员权限 |
| 指定镜像源 | pip install -i <源URL> <包名> |
更换为国内镜像可大幅提升下载速度 |
| 清理缓存 | pip cache purge |
清理下载缓存,释放磁盘空间 |
| 查看帮助 | pip --help |
查看所有pip命令的官方帮助信息 |
4.进阶小技巧
1.使用国内镜像源加速
默认的PyPI官网在国外,下载较慢。使用国内镜像源可以显著提速,如使用清华镜像源:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
-i参数选项表示:指定包的索引源(Index URL),即告诉pip从这个URL地址去搜索和下载包,而不是从默认的PyPI的官网(Simple index)下载
2.利用requests.txt管理项目依赖
这是最常见的项目协作方式
(1) 导出当前项目环境的所有依赖
pip freeze > requirements.txt
freeze是pip的命令之一,作用是以特定的格式列出当前Python环境中已安装的所有包和精确的版本号
>符号和Linux中的输出重定向符号一样并且作用也一样(重定向符的作用是改变命令的输入输出方向,让数据不再默认流向屏幕或键盘,而是去往文件或其他地方)。这里pip freeze默认情况会直接将输出结果显示到屏幕上,而pip freeze > requirements.txt这行命令结合输出重定向符号会将pip freeze的结果被”重定向“到requirements.txt文件里面,屏幕不再显示任何内容
三种常用的重定向符号:
| 符号 | 名称 | 作用 | 示例 |
|---|---|---|---|
> |
输出重定向(覆盖) | 将命令的输出写入文件,覆盖原有内容 | echo hello > a.txt |
>> |
输出重定向(追加) | 将命令的输出追加到文件末尾 | echo world >> a.txt |
< |
输入重定向 | 将文件内容作为命令的输入 | sort < list.txt |
(2) 在新环境中一键安装所有依赖
pip install -r requirements.txt
-r是requirements的缩写,表示让pip根据一个文本文件(通常是requirements.txt)中列出的包列表,来批量安装这些包。
注:改文本文件的内容有严格要求,因为pip需要准确解析它
每行一个包,如:
anyio==4.10.0
argon2-cffi==25.1.0
argon2-cffi-bindings==25.1.0
arrow==1.3.0
asttokens==3.0.0
async-lru==2.0.5
attrs==25.3.0
babel==2.17.0
beautifulsoup4==4.13.5
bleach==6.2.0
bs4==0.0.2
certifi==2025.11.12
cffi==1.17.1
charset-normalizer==3.4.2
clarabel==0.11.1
colorama==0.4.6
comm==0.2.3
contourpy==1.3.2
cvxopt==1.3.2
cvxpy==1.7.1
cycler==0.12.1
debugpy==1.8.16
decorator==5.2.1
defusedxml==0.7.1
et_xmlfile==2.0.0
executing==2.2.0
fake-useragent==2.2.0
fastjsonschema==2.21.2
fonttools==4.58.0
fqdn==1.5.1
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
idna==3.10
ipykernel==6.30.1
ipython==9.2.0
ipython_pygments_lexers==1.1.1
isoduration==20.11.0
jedi==0.19.2
jieba==0.42.1
Jinja2==3.1.6
joblib==1.5.0
json5==0.12.1
jsonpath==0.82.2
jsonpointer==3.0.0
jsonschema==4.25.1
jsonschema-specifications==2025.9.1
jupyter-events==0.12.0
jupyter-lsp==2.3.0
jupyter_client==8.6.3
jupyter_core==5.8.1
jupyter_server==2.17.0
jupyter_server_terminals==0.5.3
jupyterlab==4.4.7
jupyterlab_pygments==0.3.0
jupyterlab_server==2.27.3
kiwisolver==1.4.8
lark==1.2.2
lxml==6.0.2
MarkupSafe==3.0.2
matplotlib==3.10.3
matplotlib-inline==0.1.7
mistune==3.1.4
mpmath==1.3.0
narwhals==2.13.0
nbclient==0.10.2
nbconvert==7.16.6
nbformat==5.10.4
nest-asyncio==1.6.0
notebook==7.4.5
notebook_shim==0.2.4
numpy==2.2.6
openpyxl==3.1.5
osqp==1.0.4
outcome==1.3.0.post0
packaging==25.0
pandas==2.2.3
pandocfilters==1.5.1
parso==0.8.4
patsy==1.0.1
pillow==11.2.1
platformdirs==4.3.8
plotly==6.5.0
ply==3.11
prettytable==3.17.0
prometheus_client==0.22.1
prompt_toolkit==3.0.51
psutil==7.0.0
PuLP==3.2.2
pure_eval==0.2.3
py4j==0.10.9.9
pycparser==2.22
pyecharts==2.0.9
Pygments==2.19.1
pyomo==6.9.3
pyparsing==3.2.3
PySocks==1.7.1
pyspark-stubs==3.0.0.post3
python-dateutil==2.9.0.post0
python-docx==1.2.0
python-json-logger==3.3.0
pytz==2025.2
pywin32==311
pywinpty==3.0.0
PyYAML==6.0.2
pyzmq==27.0.1
referencing==0.36.2
requests==2.32.4
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rfc3987-syntax==1.1.0
rpds-py==0.27.1
scikit-learn==1.6.1
scipy==1.15.3
scs==3.2.7.post2
seaborn==0.13.2
selenium==4.39.0
Send2Trash==1.8.3
setuptools==80.9.0
simplejson==3.20.2
six==1.17.0
sniffio==1.3.1
sortedcontainers==2.4.0
soupsieve==2.8
stack-data==0.6.3
statsmodels==0.14.5
sympy==1.14.0
terminado==0.18.1
threadpoolctl==3.6.0
tinycss2==1.4.0
tornado==6.5.2
tqdm==4.67.1
traitlets==5.14.3
trio==0.32.0
trio-websocket==0.12.2
types-python-dateutil==2.9.0.20250822
typing_extensions==4.15.0
tzdata==2025.2
uri-template==1.3.0
urllib3==2.5.0
wcwidth==0.2.13
webcolors==24.11.1
webencodings==0.5.1
websocket-client==1.8.0
wsproto==1.3.2
XLML==0.1.2
xlsxwriter==3.2.9
zhplot==1.0.0
虽然有点长,但确实是我之前的Python3.13.3中安装的所有包,没有用虚拟环境
四.虚拟环境最最开始的实战
在Windows系统中,桌面的绝对路径是:
C:\Users\你的用户名\Desktop
打开CMD命令提示符窗口时默认显示的路径是:
C:\User\你的用户名
这就是用户文件夹(主目录),而不是桌面。Windows为每个用户分配了一个独立的文件夹,用户存放改用户的文档、下载、桌面、图片等个人数据。CMD默认打开时会自动定位到这个目录,方便用户访问自己的文件。
如:
打开CMD窗口后,显示:
C:\User\zhangsan>
其中>是命令提示符,作用是:等待你输入命令,并表明当前所在的位置(路径)
不同系统的提示符不同:
| 系统/Shell | 提示符 | 说明 |
|---|---|---|
| Windows cmd | C:\Users\张三> |
路径 + > |
| Windows PowerShell | PS C:\Users\张三> |
PS + 路径 + > |
| Linux/Mac bash | zhangsan@computer:~$ |
用户名@主机名:路径$ |
| Python 交互模式 | >>> |
三个大于号 |
之后输入dir:
C:\User\zhangsan>dir
回车,会看到当前目录路径下的文件和子目录,会发现桌面就在这个目录下(在用户目录下):
2026/05/12 23:38 <DIR> Desktop
其中各列表示:
各列含义:
-
第一列:最后修改日期
-
第二列:最后修改时间(或
<DIR>表示文件夹) -
第三列:文件大小(字节)或
<DIR> -
第四列:文件/文件夹名称
下面是我在我电脑中的实战
打开CMD
Microsoft Windows [版本 10.0.26200.8246]
(c) Microsoft Corporation。保留所有权利。
C:\Users\Admin>cd Desktop
C:\Users\Admin\Desktop>dir
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop 的目录
2026/05/12 23:38 <DIR> .
2026/05/27 13:03 <DIR> ..
2025/09/01 13:44 1,138 EViews9.lnk
2025/10/20 13:39 2,256 Google Chrome.lnk
2025/11/09 09:53 1,036 HBuilder X.lnk
2026/03/04 21:06 2,359 IBM SPSS Statistics 19.lnk
2025/10/20 13:39 2,338 Microsoft Edge.lnk
2026/03/22 09:28 1,578 MobaXterm_Personal_25.4.lnk
2025/09/20 11:32 <DIR> test
2025/09/15 15:58 1,171 Trae CN.lnk
2025/10/07 19:30 1,097 Visual Studio 2022.lnk
2025/06/01 14:40 1,634 Visual Studio Code.lnk
2026/02/02 17:40 820 夸克.lnk
2025/09/02 08:23 1,383 百度网盘.lnk
2025/07/05 21:58 737 金山打字通.lnk
12 个文件 17,547 字节
3 个目录 209,491,505,152 可用字节
C:\Users\Admin\Desktop>rem 这是remark的缩写,rem后面的内容会被忽略
C:\Users\Admin\Desktop>rem 用mkdir或md在桌面新建一个目录
C:\Users\Admin\Desktop>mkdir project01
C:\Users\Admin\Desktop>dir project01
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop\project01 的目录
2026/06/07 21:05 <DIR> .
2026/06/07 21:05 <DIR> ..
0 个文件 0 字节
2 个目录 209,487,728,640 可用字节

而由于CMD中没有像Linux中的touch命令一样可以新建空文件的命令,如果要新建文件则要用到其他命令的”变通方法“,这里就采用更方便也更常用的在图形化界面直接右击新建文件
打开project01文件下,右击新建一个文本文件,输入import request,Ctrl + S保存。然后将文件名从”新建 文本文档.txt“ 改为 ”main.py“
C:\Users\Admin\Desktop>rem 查看Python解释器的版本
C:\Users\Admin\Desktop>python --version
Python 3.14.3
C:\Users\Admin\Desktop>python -V
Python 3.14.3
使用py -0来查看电脑中安装的每个Python解释器的信息。注意是数字0而不是字母o
py -0是用于列出Windows系统中所有已安装并注册的Python解释器版本的命令,让py启动器(Python Launcher For Windows,launch是发动、发射的意思,launcher是发射器,启动器的意思)扫描系统注册表,找出所有它能够识别和管理的Python版本,并以清晰的列表格式展示给你
- py:这是Windows自带的Python启动程序(py.exe)。它不是Python本身,而是一个版本选择器。
- -0:这是传递给py启动器的参数。0是数字0,代表”zero“,列出”第0项“或者”列出全部项“
C:\Users\Admin\Desktop>py -0
-V:3.14 * Python 3.14 (64-bit)
-V:3.13 Python 3.13 (64-bit)
-V:3.10 Python 3.10 (64-bit)
C:\Users\Admin\Desktop>py -3.13
Unable to create process using 'D:\CodeFamily\Python\Python313\python.exe': ???????????
C:\Users\Admin\Desktop>py -3.10
Unable to create process using '"D:\Python Files\python3.10.11\python.exe"': ???????????
py -0的输出表示:
我的电脑上安装了3个版本的Python,并且都已经被python启动器py.exe正确识别和注册了。
逐行解释:
-
-V:3.14 *-
-V:3.14:这是该 Python 版本的标识符。你可以用py -3.14或py -V:3.14来精确启动这个版本。 -
*:星号表示这是当前系统的默认版本。当你在命令行中直接输入python或py而不指定版本号时,启动的就是这个版本。 -
Python 3.14 (64-bit):该版本的具体描述,这是一个 64位的 Python 3.14 版本。
-
-
-V:3.13-
表示另一个已安装的 Python 3.13 版本。它没有星号,不是默认版本,但你可以用
py -3.13来启动它。
-
-
-V:3.10-
表示第三个已安装的 Python 3.10 版本。
-
为什么会有多个版本?
这是 Python 开发中非常常见的、也是推荐的做法。不同的项目可能依赖于不同版本的 Python(例如,一个老项目需要 3.10,而一个新项目想用 3.14 的最新特性)。Windows 的 Python 启动器 py.exe 就是为了优雅地管理这种多版本环境而设计的。
使用py -3.13命令,它的作用是启动电脑上安装的Python3.13版本(前提是该版本已正确安装并注册)
但是我使用py -3.13和py -3.10的结果输出表明:
Python启动器能够找到这些版本的注册信息,但无法找到或执行它们对应的python.exe文件。简单来说就是注册表里还有Python3.13和Python3.10的信息,但是实际文件可能被移动了或删除了。
错误原因分析:
| 版本 | 注册表中的路径 | 问题 |
|---|---|---|
| Python 3.13 | D:\CodeFamily\Python\Python313\python.exe |
该路径下没有 python.exe |
| Python 3.10 | D:\Python Files\python3.10.11\python.exe |
该路径下没有 python.exe |
| Python 3.14 | 未显示错误 | 文件存在,工作正常 |
为什么 py -0 还能看到它们?
-
py -0读取的是 Windows 注册表中的安装记录 -
这些记录不会因为删除了文件夹而自动清除
-
所以即使文件没了,注册表里还“记得”它们曾经安装过
在CMD中验证这些文件是否真的存在:
C:\Users\Admin\Desktop>dir "D:\CodeFamily\Python\Python313\python.exe"
系统找不到指定的文件。
C:\Users\Admin\Desktop>dir "D:\Python Files\python3.10.11\python.exe"
系统找不到指定的文件。
输出结果表明这些文件已经被移动或删除(实际上是之前被我删除了)
解决方案:
清理注册表中的无效记录(注册表是Windows系统中的”中央数据库“,程序需要告诉它”我在哪里,我能做什么“。当你执行py -3.13时py启动器本身不知道Python3.13在哪里,它必须去查一个记录本,这个记录表就是注册表。补充一下:其中注册表不止有这个作用,它是Windows 的核心配置数据库,存储操作系统、硬件驱动、应用程序的几乎所有配置信息)
| 维度 | PATH 环境变量 | 注册表 |
|---|---|---|
| 定位 | 单一配置项 | 整个系统配置数据库 |
| 功能 | 命令搜索路径 | 全局配置存储中心 |
| 影响范围 | 主要影响程序查找和运行 | 影响系统方方面面的行为 |
| 用户接触 | 经常手动修改 | 通常由软件和系统维护 |
清理步骤:
- 打开注册表编辑器:按Win + R,输入regedit(register是登记表,注册,登记的意思,regedit 是 Registry Editor 的缩写。)然后回车。或者在电脑的任务栏中的搜索框中输出”注册表“等关键字进行搜索
- 找到Python的注册表项:在顶部的地址栏,粘贴一下路径并回车:计算机\HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore
- 删除无效的Python版本:右键点击3.13和3.10这两个版本,选择删除


现在再执行:py -0
C:\Users\Admin\Desktop>py -0
-V:3.14 * Python 3.14 (64-bit)
预防建议:
以后卸载 Python 时,请通过 控制面板 -> 程序和功能 进行卸载,或者运行 Python 安装程序并选择 “Uninstall”。这能确保安装文件和注册表信息被干净地清除,避免遗留此类问题。
| 文件 | 作用 | 位置 |
|---|---|---|
python-3.13.0-amd64.exe |
安装/卸载/修复 Python | 你的下载文件夹(或桌面) |
python.exe |
运行 Python 代码 | D:\CodeFamily\Python\Python313\ |
Python 安装程序是:
-
你最初从官网下载的
python-3.x.x.exe或python-3.x.x-amd64.exe这样的文件 -
它是一个独立的安装包(通常几百 KB 到几十 MB)
python.exe 是安装完成后生成的解释器程序(在安装目录里),它不能用来卸载 Python。
前戏结束,正菜开始!
C:\Users\Admin\Desktop>py -0
-V:3.14 * Python 3.14 (64-bit)
C:\Users\Admin\Desktop>cd project01
C:\Users\Admin\Desktop\project01>dir
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop\project01 的目录
2026/06/07 21:15 <DIR> .
2026/06/07 21:05 <DIR> ..
2026/06/07 21:14 15 main.py
1 个文件 15 字节
2 个目录 209,361,575,936 可用字节
C:\Users\Admin\Desktop\project01>rem 使用type命令(CMD中最基础的查看命令),将文件内容全部输出到屏幕上
C:\Users\Admin\Desktop\project01>type main.py
import requests
C:\Users\Admin\Desktop\project01>python main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
C:\Users\Admin\Desktop\project01>python -V
Python 3.14.3
C:\Users\Admin\Desktop\project01>python 3.14.3 main.py
python: can't open file 'C:\\Users\\Admin\\Desktop\\project01\\3.14.3': [Errno 2] No such file or directory
C:\Users\Admin\Desktop\project01>py -3.14 main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
C:\Users\Admin\Desktop\project01>py -3 main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
C:\Users\Admin\Desktop\project01>py -3.14.3 main.py
No suitable Python runtime found
Pass --list (-0) to see all detected environments on your machine
or set environment variable PYLAUNCHER_ALLOW_INSTALL to use winget
or open the Microsoft Store to the requested version.
每个错误的解释:
1.
C:\Users\Admin\Desktop\project01>python 3.14.3 main.py
python: can't open file 'C:\\Users\\Admin\\Desktop\\project01\\3.14.3': [Errno 2] No such file or directory
把3.14.3写在了python和main.py之间,导致python把3.14.3当成了要运行的文件名
但是python命令的基本语法是:
python 文件名.py
当你写python 3.14.3 main.py时,python认为3.14.3是要运行的文件名,main.py要传递给脚本的参数,然后python去找该文件:C:\User\Admin\Desktop\project01\3.14.3,很明显,project01下只有main.py而没有3.14.3,找不到文件,自然报错
2.
C:\Users\Admin\Desktop\project01>python main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
这是因为你的Python3.14.3中没有安装requests这个库,requests这个库是第三方库,需要手动安装
3.
C:\Users\Admin\Desktop\project01>py -3.14 main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
这个错误本质上和错误2是一样的,都是说明Python3.14环境中没有安装requests这个库
C:\Users\Admin\Desktop\project01>python -V
Python 3.14.3
C:\Users\Admin\Desktop\project01>py -V
Python 3.14.3
C:\Users\Admin\Desktop\project01>py -0
-V:3.14 * Python 3.14 (64-bit)
C:\Users\Admin\Desktop\project01>py -3.14 -V
Python 3.14.3
查看python指向哪个版本:python -V或者python --version
查看py指向哪个版本
python -V 和 py -V 都是显示 Python 版本号的命令,但底层机制不同。
核心区别
| 对比项 | python -V |
py -V |
|---|---|---|
| 调用的是什么 | 环境变量 PATH 中找到的第一个 python.exe |
Windows Python 启动器 py.exe |
| 版本来源 | PATH 中排在最前的 Python | 注册表中标记为默认(带 *)的 Python |
| 如果默认版本不同 | 可能和 py -V 显示不同 |
可能和 python -V 显示不同 |
py -0 |
列出所有已安装的 Python 版本 | -0 是数字零,显示版本列表和默认版本(带 *) |
py -3.14 -V |
显示 Python 3.14 的版本号 | 明确指定版本后再查版本号 |
4.
C:\Users\Admin\Desktop\project01>py -3.14.3 main.py
No suitable Python runtime found
Pass --list (-0) to see all detected environments on your machine
or set environment variable PYLAUNCHER_ALLOW_INSTALL to use winget
or open the Microsoft Store to the requested version
同样没有安装requests第三方库的原因
版本号和版本在 Python 语境下是同一个东西,只是叫法不同。
简单来说
| 说法 | 含义 | 示例 |
|---|---|---|
| 版本 | 口语/简称 | "Python 3.14" |
| 版本号 | 完整/正式名称 | "Python 3.14.3" |
它们的关系
-
版本 = 主版本.次版本(如 3.14)
-
版本号 = 主版本.次版本.补丁版本(如 3.14.3)
下载安装requests库:
C:\Users\Admin\Desktop\project01>pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
C:\Users\Admin\Desktop\project01>pip list
Package Version
------------------ ---------
certifi 2026.5.20
charset-normalizer 3.4.7
idna 3.18
pip 25.3
requests 2.34.2
urllib3 2.7.0
再次运行:都没有报错
C:\Users\Admin\Desktop\project01>py main.py
C:\Users\Admin\Desktop\project01>python main.py
C:\Users\Admin\Desktop\project01>py -3.14 main.py
C:\Users\Admin\Desktop\project01>py -3 main.py
C:\Users\Admin\Desktop\project01>python main.py
卸载requests库:
先查看requests有哪些依赖库(因为我最开始Python3.14.3是没有任何第三方库的)
C:\Users\Admin\Desktop\project01>pip show requests
Name: requests
Version: 2.34.2
Summary: Python HTTP for Humans.
Home-page:
Author:
Author-email: Kenneth Reitz <me@kennethreitz.org>
License: Apache-2.0
Location: D:\CodeFamily\Python\Python314\Lib\site-packages
Requires: certifi, charset_normalizer, idna, urllib3
Required-by:
从输出可以看出:
Requires(需要) 这行列出了 requests 依赖的 4 个库:
-
certifi -
charset_normalizer -
idna -
urllib3
Required-by(被需要) 这行是空的,说明:
-
没有其他包依赖
requests -
可以安全卸载
requests
⚠️ 注意事项:删除前先确认这些依赖没有被其他包共用(如用pip show certifi)
C:\Users\Admin\Desktop\project01>pip show certifi
Name: certifi
Version: 2026.5.20
Summary: Python package for providing Mozilla's CA Bundle.
Home-page: https://github.com/certifi/python-certifi
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: MPL-2.0
Location: D:\CodeFamily\Python\Python314\Lib\site-packages
Requires:
Required-by: requests
删除:
C:\Users\Admin\Desktop\project01>pip uninstall requests certifi charset_normalizer idna urllib3 -y
WARNING: Skipping requests as it is not installed.
WARNING: Skipping certifi as it is not installed.
WARNING: Skipping charset_normalizer as it is not installed.
Found existing installation: idna 3.18
Uninstalling idna-3.18:
Successfully uninstalled idna-3.18
Found existing installation: urllib3 2.7.0
Uninstalling urllib3-2.7.0:
Successfully uninstalled urllib3-2.7.0
C:\Users\Admin\Desktop\project01>list
'list' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
C:\Users\Admin\Desktop\project01>pip list
Package Version
------- -------
pip 25.3
在pip后面加上-y或者--yes的参数可以跳过卸载时的确认提示
再运行,结果符合预期
C:\Users\Admin\Desktop\project01>python main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
1.创建一个虚拟环境
选择一个合适的目录(比如你的项目文件夹),这里就用我们创建的project01文件夹
使用Python自带的venv模块,无需安装任何额外工具就能创建Python的虚拟环境,只需你打开命令提示符CMD或PowerShell
python -m venv 虚拟环境名称
其中python -m venv是固定格式,意思是调用venv模块
首先,创建虚拟环境可以根据不同的Python解释器来创建
方法一:使用完整路径调用特定版本的Python解释器
# 例如,使用Python 3.10创建虚拟环境
C:\Python310\python.exe -m venv my_env
# 或者使用Python 3.9
C:\Python39\python.exe -m venv my_env
# 如果Python在Program Files目录下(注意路径有空格要加引号)
"C:\Program Files\Python310\python.exe" -m venv my_env
方法二:使用py命令(推荐)
Windows安装Python时通常会安装py启动器,使用py命令来创建虚拟环境是最灵活的方法
py启动器的作用
py 启动器是 Windows 平台上专门为 Python 设计的一个版本管理和启动工具。它的核心作用是帮你轻松应对电脑上安装的多个 Python 版本,让你无需手动管理复杂的路径和环境变量。
简单来说,如果没有 py,你在命令行输入 python,系统只会运行那个在 PATH 环境变量中排在最前面的 Python 版本。如果需要临时换一个版本(比如从 Python 3.11 换到 3.9),就会非常麻烦。而 py 就像一个智能的“调度员”,让你能精确、方便地选择使用哪一个 Python 版本。
💡 为什么它是 Windows 的“必备工具”?
在 Linux 或 macOS 上,python3 命令通常会指向一个确定的系统 Python。但 Windows 原生没有这样的机制。
py 启动器的出现,完美地填补了这个空白:
-
官方内置:从 Python 3.3 版本开始,它就是 Windows 安装包的一部分(安装时默认勾选)。
-
无需配置 PATH:即使你安装 Python 时忘了勾选“Add Python to PATH”,
py命令依然可以直接在命令行中使用。 -
统一入口:无论你安装了多少个 Python 版本,一个
py命令就能管理它们全部。
# 列出所有已安装的Python版本
py -0
# 输出示例:
# -V:3.11 * Python 3.11 (64-bit)
# -V:3.10 Python 3.10 (64-bit)
# -V:3.9 Python 3.9 (64-bit)
# 使用Python 3.10创建虚拟环境
py -3.10 -m venv my_env
# 使用Python 3.11
py -3.11 -m venv my_env
# 使用Python 3.9(32位版本)
py -3.9-32 -m venv my_env
第一步:创建虚拟环境
C:\Users\Admin\Desktop\project01>python -m venv my_first_venv
C:\Users\Admin\Desktop\project01>dir
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop\project01 的目录
2026/06/07 23:55 <DIR> .
2026/06/07 21:05 <DIR> ..
2026/06/07 21:14 15 main.py
2026/06/07 23:55 <DIR> my_first_venv
1 个文件 15 字节
3 个目录 209,022,500,864 可用字节



2.激活虚拟环境
第二步:激活并使用这个虚拟环境
如果使用的是powershell,则使用命令:my_first_venv\Scripts\Activate.ps1
我现在用的是CMD
C:\User\Admin\Desktop\project01>my_first_venv\Scripts\activate.bat
激活后,会看到命令行提示符前面出现 (my_first_venv),这是激活成功的标志
(my_first_venv) C:\Users\Admin\Desktop\project01>
查看Python的版本:
(my_first_venv) C:\Users\Admin\Desktop\project01>python -V
Python 3.14.3
(my_first_venv) C:\Users\Admin\Desktop\project01>python --version
Python 3.14.3
(my_first_venv) C:\Users\Admin\Desktop\project01>py -0
* Active venv
-V:3.14 Python 3.14 (64-bit)
(my_first_venv) C:\Users\Admin\Desktop\project01>pip list
Package Version
------- -------
pip 25.3
最开始用清华镜像源出了点问题,终端一片报红,于是换成了阿里云镜像源
(my_first_venv) C:\Users\Admin\Desktop\project01>pip install requests -i https://mirrors.aliyun.com/pypi/simple/
(my_first_venv) C:\Users\Admin\Desktop\project01>pip list
Package Version
------------------ ---------
certifi 2026.5.20
charset-normalizer 3.4.7
idna 3.18
pip 25.3
requests 2.34.2
urllib3 2.7.0
运行main.py没有报错
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py
(my_first_venv) C:\Users\Admin\Desktop\project01>rem 导出依赖列表,只是为了练习pip freeze
(my_first_venv) C:\Users\Admin\Desktop\project01>pip freeze
certifi==2026.5.20
charset-normalizer==3.4.7
idna==3.18
requests==2.34.2
urllib3==2.7.0
(my_first_venv) C:\Users\Admin\Desktop\project01>pip freeze > requirements.txt
(my_first_venv) C:\Users\Admin\Desktop\project01>dir
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop\project01 的目录
2026/06/08 00:25 <DIR> .
2026/06/07 21:05 <DIR> ..
2026/06/07 21:14 15 main.py
2026/06/07 23:55 <DIR> my_first_venv
2026/06/08 00:25 93 requirements.txt
2 个文件 108 字节
3 个目录 209,123,557,376 可用字节

(my_first_venv) C:\Users\Admin\Desktop\project01>type requirements.txt
certifi==2026.5.20
charset-normalizer==3.4.7
idna==3.18
requests==2.34.2
urllib3==2.7.0
3.退出虚拟环境
deactivate命令退出虚拟环境
(my_first_venv) C:\Users\Admin\Desktop\project01>deactivate
C:\Users\Admin\Desktop\project01>
C:\Users\Admin\Desktop\project01>pip list
Package Version
------- -------
pip 25.3
可见退出虚拟环境后,系统的环境中并没有requests这个库,说明系统全局环境和虚拟环境确实是独立、互不影响的
再次验证:
C:\Users\Admin\Desktop\project01>dir
驱动器 C 中的卷是 OS
卷的序列号是 AA07-EAE7
C:\Users\Admin\Desktop\project01 的目录
2026/06/08 00:25 <DIR> .
2026/06/07 21:05 <DIR> ..
2026/06/07 21:14 15 main.py
2026/06/07 23:55 <DIR> my_first_venv
2026/06/08 00:25 93 requirements.txt
2 个文件 108 字节
3 个目录 209,128,361,984 可用字节
C:\Users\Admin\Desktop\project01>python main.py
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\project01\main.py", line 1, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
再次激活得以进入虚拟环境:
(my_first_venv) C:\Users\Admin\Desktop\project01>pip list
Package Version
------------------ ---------
certifi 2026.5.20
charset-normalizer 3.4.7
idna 3.18
pip 25.3
requests 2.34.2
urllib3 2.7.0
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py
(my_first_venv) C:\Users\Admin\Desktop\project01>
编辑main.py
(my_first_venv) C:\Users\Admin\Desktop\project01>notepad main.py

Ctrl + S保存
(my_first_venv) C:\Users\Admin\Desktop\project01>notepad main.py
(my_first_venv) C:\Users\Admin\Desktop\project01>type main.py
# import requests
def add(a,b):
return a + b
x, y = map(int, input().split())
res = add(x, y)
print(res)
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py 1 2
问题出现在input()函数的执行方式上!input()函数会等待用户从键盘上输入,而不是从命令行参数中读取
所以当执行python main.py 1 2 时,程序没有读取1 2 作为参数,而是在等待你手动输入两个数字。需要注意的是,程序并没有卡死,而是一直在等待你输入两个数字
(my_first_venv) C:\Users\Admin\Desktop\project01>type main.py
# import requests
def add(a,b):
return a + b
x, y = map(int, input().split())
res = add(x, y)
print(res)
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py 1 2
1 2
3
如果想要从命令行中读取参数,则需要修改代码
这时我们就不用notepad这个命令了,直接打开main.py就可以了(不需要打开Pycharm等开发工具,如果你刚才没有关闭notepad main.py执行后出来的notepad文本编辑器)
修改main.py为:

(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py 1 2 3
3
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py 1
用法: python main.py <数字1> <数字2>
(my_first_venv) C:\Users\Admin\Desktop\project01>python main.py 5 6
11
给新手的温馨提示
-
每次打开新终端都要激活:关闭命令行窗口后,下次需要重新激活虚拟环境。
-
虚拟环境的独立性:在虚拟环境中安装的包不会影响系统Python或其他项目。
-
.gitignore建议:如果你使用Git,记得把
my_first_venv/添加到.gitignore文件中,避免提交虚拟环境文件夹。
2026年6月8日09点05分的补充:
(my_first_venv) C:\Users\Admin\Desktop\project01>type main.py
# import requests
import sys
def add(a, b):
return a + b
# 浠庡懡浠よ鍙傛暟璇诲彇锛岃€屼笉鏄?input()
if len(sys.argv) >= 3:
x = int(sys.argv[1])
y = int(sys.argv[2])
res = add(x, y)
print(res)
else:
print("鐢ㄦ硶: python main.py <鏁板瓧1> <鏁板瓧2>")
(my_first_venv) C:\Users\Admin\Desktop\project01>notepad main.py
(my_first_venv) C:\Users\Admin\Desktop\project01>type main.py
# import requests
import sys
def add(a, b):
return a + b
# 从命令行参数读取,而不是 input()
if len(sys.argv) >= 3:
x = int(sys.argv[1])
y = int(sys.argv[2])
res = add(x, y)
print(res)
else:
print("用法: python main.py <数字1> <数字2>")
(my_first_venv) C:\Users\Admin\Desktop\project01>
解释:
输出乱码是因为文件编码问题。main.py中包含中文字符。但保存时使用的编码格式与命令行默认的编码格式不一致
用notepad main.py使用记事本打开main.py,可以发现右下角显示UTF-8,UTF-8是目前世界上最通用的字符标准,它几乎支持字符,无论是中文、英文、日文等等
但Windows中文系统的cmd默认用的是GBK编码格式,而在Windows中文系统中ANSI编码格式指的就是GBK格式,文件和命令行使用同一种编码格式,自然就不会出现乱码了。
我的解决方法:用记事本打开main.py后,点击左上方的“文件”选项 → 点击另存为 → 在弹出的对话框中下方的编码格式下拉框中选择ANSI编码格式 → 弹出小对话框,点击是或者确认,会替换掉原有的main.py,然后再次使用type main.py查看文件内容就不会乱码了。
更多推荐


所有评论(0)