一.虚拟环境的概念

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正确识别和注册了。

逐行解释:

  1. -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 版本。

  2. -V:3.13

    • 表示另一个已安装的 Python 3.13 版本。它没有星号,不是默认版本,但你可以用 py -3.13 来启动它。

  3. -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 环境变量 注册表
定位 单一配置项 整个系统配置数据库
功能 命令搜索路径 全局配置存储中心
影响范围 主要影响程序查找和运行 影响系统方方面面的行为
用户接触 经常手动修改 通常由软件和系统维护

清理步骤:

  1. 打开注册表编辑器:按Win + R,输入regedit(register是登记表,注册,登记的意思,regedit 是 Registry Editor 的缩写。)然后回车。或者在电脑的任务栏中的搜索框中输出”注册表“等关键字进行搜索
  2. 找到Python的注册表项:在顶部的地址栏,粘贴一下路径并回车:计算机\HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore
  3. 删除无效的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

 给新手的温馨提示

  1. 每次打开新终端都要激活:关闭命令行窗口后,下次需要重新激活虚拟环境。

  2. 虚拟环境的独立性:在虚拟环境中安装的包不会影响系统Python或其他项目。

  3. .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查看文件内容就不会乱码了。

更多推荐