news 2026/7/14 17:24:03

彻底搞懂Python环境:原理、管理与Conda、uv实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
彻底搞懂Python环境:原理、管理与Conda、uv实战

目录

  • 一、什么是python环境
    • 1.1 什么是python环境
    • 1.2 什么是python虚拟环境
  • 二、sys.path 生成和使用(包查找顺序)
    • 2.1 是什么
    • 2.2 用来干什么
    • 2.3 包含什么
    • 2.4 生成方式和存储
  • 三、pip 包管理
  • 四,虚拟环境的使用和管理
    • 4.1 Anaconda
      • 4.1.1 Anaconda
      • 4.1.2 conda
      • 4.1.3 conda环境管理
    • 4.2 uv
      • 是什么
      • 用来干什么
      • 优势
      • 如何用
        • 环境创建
        • 切换、查看、退出环境
        • 环境内使用、安装包
        • 环境迁移、备份、删除环境
  • 五,python cli
    • 是什么
    • 用来干什么
    • 原理
      • pip和setuptools
      • 核心流程

一、什么是python环境

1.1 什么是python环境

是什么?
运行、开发 Python 代码的整套配套环境,让系统能识别并执行.py 程序。

包含内容?

  1. Python 解释器:核心,翻译执行代码
  2. 标准库:自带内置工具包(文件、网络、数学等)
  3. 第三方包:pip 安装的拓展库(numpy、requests 等)
  4. 包管理工具:pip,安装 / 卸载第三方库

目录层次结构
windows:

C:\Python310\├── Lib/ │ ├── site-packages/# 第三方包│ ├── json/ │ ├── os.py │ └──... ├── Scripts/# 可执行脚本│ ├── pip.exe │ ├── python.exe │ └──... ├── Include/# 头文件└── DLLs/# 动态链接库

linux:

/usr/local/python3.10/ ├── bin/ │ ├── python3、pip3# 解释器、pip├── lib/python3.10/ │ ├── 标准库源码 │ └── site-packages/# 全局第三方包└── include/、share/

1.2 什么是python虚拟环境

是什么?
系统环境(全局环境)的轻量复制,是一个轻量级的隔离环境。

包含什么?

  1. Python 解释器:Windows 复制本体文件,Linux/Mac 以软链接复用全局解释器;
  2. 标准库:不单独复制,通过链接共用全局 Python 自带标准库,可直接调用;
  3. 独立 pip 工具:专属包管理;
  4. 完全隔离的 site-packages 文件夹:存放当前项目专属第三方库,不和其他环境共享。

目录结构:
Windows:

venv/ ├── Scripts/ │ ├── python.exe# 复制的解释器程序│ └── pip.exe# 独立pip├── Lib/ │ └── site-packages/# 【完全独立】本项目第三方包└── pyvenv.cfg# 记录依赖的全局Python路径

Linux:

venv/ ├── bin/ │ ├── python3# 软链接指向全局解释器│ └── pip3 ├── lib/python3.10/ │ ├── 软链接 → 全局标准库(无本地标准库文件) │ └── site-packages/# 【完全独立】项目第三方包└── pyvenv.cfg
  • 我们在pycharm等IDE创建一个python工程时,一般情况下会创建一个当前项目的虚拟环境,以pycharm为例,pycharm会在项目目录中创建一个.venv目录,这个目录就是pycharm创建的虚拟环境,里面包含一个空的存放第三方库的site-packages目录、Scripts目录中包含该虚拟环境的解释器(python.exe)、以及pip等脚本工具。

  • 虽然pycharm创建了这个虚拟环境,但是并不代表我们一定就要用这个虚拟环境,我们可以在设置中选择使用这个虚拟环境或者使用系统环境,直接在设置中的解释器选项中选择使用哪个环境。

二、sys.path 生成和使用(包查找顺序)

2.1 是什么

Python 内置模块sys下的字符串列表,存储模块搜索路径。

2.2 用来干什么

import导入模块时,Python 按列表顺序挨个目录查找.py文件。

2.3 包含什么

  1. 脚本所在目录或者当前工作目录(项目根目录)
    • 直接运行 .py 文件 → 首路径 = 脚本所在目录
    • 交互 shell /-m 模块运行 → 首路径 = 当前工作目录(用’'表示)
  2. 环境变量 PYTHONPATH 配置的自定义目录
  3. Python 标准库安装目录(内置模块、自带标准库)
  4. site-packages 第三方包目录 + .pth 文件追加的自定义路径(第三方库存放处)

2.4 生成方式和存储

  1. 解释器启动,首先将脚本目录或者工作目录加入sys.path
  2. 再读取PYTHONPATH环境变量目录加入sys.path
  3. 读取编译时固化在解释器二进制里的原始安装路径(全局路径),存入内存sys.base_prefix,并将sys.prefix初始赋值为该值;
  4. 从解释器所在目录(入口调用路径,就是环境变量里的路径,不会再解析软/硬连接)向上逐层检索,判断是否存在pyvenv.cfg
    • 未找到:全局环境,保留sys.prefix不变;
    • 找到虚拟环境标记文件:覆盖sys.prefix为虚拟环境根目录。
  5. 基于sys.base_prefix拼接平台配套标准库系列目录(lib/pythonX.Y、动态扩展目录、zip 归档等),统一追加至sys.path;
  6. 解释器自动隐式导入并执行标准库site模块:site先读取当前sys.prefix加载环境内site-packages,非虚拟环境时额外加载用户独立site-packages,全部追加进sys.path
  7. site扫描site-packages下所有.pth文件,解析其中目录补充至sys.path

整个流程在程序代码运行前一次性完成,运行中可手动修改 sys.path 临时新增搜索路径。

三、pip 包管理

pip是什么
Python 官方包管理工具,用于安装、卸载第三方库。

是否在环境变量?

  1. 全局 Python:Scripts目录加入系统 PATH,可直接调用 pip;
  2. 虚拟环境激活后仅当前终端临时追加 venv 的 Scripts 到 PATH,关闭失效

pip 如何确定包安装位置

  1. pip工具脚本指向python解释器,操作系统从path中找python解释器执行pip脚本

  2. 执行pip install等价于python -m pip,始终由对应环境的 Python 解释器运行 pip 内部代码。

  3. 解释器初始化完成后,sys.prefix代表当前生效环境根目录(全局 Python 或虚拟环境)。

  4. --user参数时:pip 拼接sys.prefix/lib/pythonX.Y/site-packages作为包安装目录;

  5. 全局 Python 带--user时:忽略sys.prefix,安装到用户专属site-packages

  6. 虚拟环境中禁止使用--user,pip 直接报错,只能安装至环境内部site-packages

补充:--user装用户目录,--target手动指定路径。

四,虚拟环境的使用和管理

  • 默认情况下,虚拟环境的管理是Python自带的venv模块在创建和管理虚拟环境,但是venv模块管理虚拟环境有明显的缺陷:

    • 环境发现困难,比如说我们想知道本地当前有哪些虚拟环境,venv模块无法做到,我们需要磁盘扫描venv目录才能知道有哪些环境
    • 环境复制麻烦
  • 所以,建议使用conda和uv。

4.1 Anaconda

4.1.1 Anaconda

Anaconda​ 是一个完整的 Python 数据科学平台,包含

  • 整套Python全局环境,包含 1500+ 预装数据科学包
  • Conda​ - 强大的包管理和环境管理工具

4.1.2 conda

是什么?
包管理和环境管理工具
用来干什么?

  1. 安装管理 Python、C/C++、CUDA 等各类底层依赖包,弥补pip无法处理二进制依赖的短板;
  2. 创建和管理Python环境

优势?

  1. 管理、查看、切换环境更方便
  2. 环境隔离更彻底,完全独立的Python解释器、标准库,而不是软链接的方式。
  3. 环境迁移方便:支持导出 yml 配置,一键复现整套环境。

4.1.3 conda环境管理

创建环境:
每个环境拥有完整独立 Python 解释器,可自由指定任意 Python 版本;

# 指定Python版本创建环境conda create-nenv_namepython=3.10# 从yml配置文件新建环境(迁移复现使用)condaenvcreate-fenvironment.yml# 克隆已有完整环境conda create-nnew_env--cloneold_env

切换、查看、退出环境
激活环境后系统 PATH 优先当前环境程序,所有 python/pip 操作作用于该环境;执行 deactivate 退出回到 base。

# 查看所有已创建环境condaenvlist# 激活指定环境(全平台通用)conda activate env_name# 退出当前环境conda deactivate

环境内使用、安装包(conda + pip)
优先用 conda install 处理 CUDA、C/C++ 当前环境底层依赖;内置独立 pip,包仅安装到当前环境;

# conda安装依赖(推荐科学计算、底层库)condainstallnumpy pandas# pip安装纯Python包pipinstallrequests# 查看当前环境已装conda包conda list# 查看当前环境pip安装的包pip list

环境迁移、备份、删除环境
导出 yml 保存全套依赖,跨设备一键重建;可直接删除无用环境释放磁盘。

# 导出当前环境全部依赖到yml文件condaenvexport>environment.yml# 根据yml文件复现整套环境condaenvcreate-fenvironment.yml# 删除无用环境(-y 跳过确认)conda remove-nenv_name--all-y

4.2 uv

是什么

也是一个高性能 Python 包管理器 + 虚拟环境管理工具

用来干什么

  1. 极速安装、解析 Python 包,解决原生 pip 慢、依赖解析卡顿问题;
  2. 仅管理 Python 类包,不处理 CUDA、C 编译器等系统二进制依赖;
  3. 创建、管理标准规范的 Python 虚拟环境。

优势

  1. 安装、依赖解析速度远超 pip、conda;
  2. 遵循官方标准虚拟环境规范,生成pyvenv.cfg,兼容性强;
  3. 体积轻量、占用磁盘小,启动快;
  4. 完整锁定依赖版本,支持 requirements.txt、pyproject.toml,迁移简单;
  5. 单二进制文件,无需预装 Python 即可使用。

如何用

环境创建

任意位置创建,不集中管理
两种构建模式:

  • 本机已有对应 Python:软链接复用本体解释器 + 标准库,仅隔离site-packages,目录生成pyvenv.cfg
  • 本机无对应版本:自动下载完整独立 Python 至 uv 缓存目录,基于该解释器构建环境;后续环境构建也会复用缓存目录中全局环境。
uv python list 可查看本机所有可用Python全局环境# 指定Python版本(有则复用,无则自动下载到缓存目录再复用)uv venv--python3.10# 指定本机已存在解释器绝对路径创建uv venv--python/usr/bin/python3.10

如果创建环境不指定Python版本,uv 选 Python 的优先级逻辑

  1. 当前目录存在.python-version文件 → 用文件里写的版本
  2. pyproject.tomlrequires-python限制 → 自动匹配兼容版本
  3. 上面都没有:读取当前终端 PATH 里默认python/python3(which python 对应的解释器)
  4. 若匹配版本本机不存在,uv 会自动下载对应独立 Python 再创建环境
# 当前目录生成 .venv,自动选解释器uv venv# 自定义环境目录,仍自动匹配Pythonuv venv ./env
切换、查看、退出环境

uv 环境分散在各个项目目录,无统一命令查看全部环境;依靠修改 PATH 激活,语法同原生 venv。

# 查看本机所有可用Python解释器(系统/conda/uv自带)uv python list# Linux/Mac 激活当前目录 .venvsource.venv/bin/activate# Windows cmd 激活.venv\Scripts\activate# Windows PowerShell 激活.venv\Scripts\Activate.ps1# 退出当前虚拟环境deactivate
环境内使用、安装包

uv 仅管理 Python 包,不处理 CUDA 等底层依赖。

  1. uv add xxx:标准项目用法,自动写入pyproject.toml并更新uv.lock,执行uv sync可批量复现全套依赖,区分运行 / 开发依赖,适合团队长期项目。执行 uv add 时它会自动识别当前目录下的.venv,不需要激活环境
  2. uv pip install:兼容 pip 语法,速度远超原生 pip,仅安装到环境,不修改配置文件,适配requirements.txt老项目迁移。
  3. 激活环境后直接用原生 pip 也可行,但无法复用 uv 全局缓存,下载解析速度慢。

注意混用弊端:pip/uv pip安装的包不会记录到 lock 文件,环境迁移同步时会缺失,优先统一使用uv add管理依赖。

# 安装运行依赖(替代pip install)uvaddnumpy requests# 仅开发环境依赖uvadd--devpytest black# 卸载包uv remove requests# 列出当前环境所有安装包uv list# 兼容原生pip语法uv pipinstallxxx
环境迁移、备份、删除环境

老项目备份、迁移

# 导出标准 requirements.txt 兼容旧工具uv pip freeze>requirements.txt# 根据txt批量安装依赖uv pipinstall-rrequirements.txt# 根据lock文件精确复现完全一致环境(推荐)

pyproject.toml和lock文件

  • pyproject.toml:项目核心配置,声明名称、版本、作者等元数据,以及依赖包的宽松版本范围(如 requests>=2.28),是项目的“需求蓝图”,开发者在此增删依赖。uv sync 第一步读取,确定需要安装哪些包。

  • uv.lock:由 uv 工具根据pyproject.toml解析生成的精确锁定文件,记录每个依赖的精确版本号、哈希校验值及完整依赖树,确保所有环境安装结果绝对一致。禁止手动修改,运行 uv sync 或 uv add 时自动更新。uv sync 第二步强制按 lock 版本安装,忽略 toml 宽松范围。

环境备份流程

  1. 项目环境创建后,先执行uv init,用于创建pyproject.toml文件
  2. 添加依赖:uv add xxx
    • 自动更新 pyproject.toml,写入依赖版本下限;
    • 重新解析依赖树,更新 uv.lock;
    • 基于 uv.lock确定的最新版本,直接将包安装进本地 .venv。
  3. 备份载体:将 pyproject.toml + uv.lock 提交代码仓库,无需上传庞大的 .venv 文件夹。
uv init# 初始化项目,生成pyproject.tomluvaddnumpy requests# 新增依赖,自动更新双配置文件uvsync# 对齐环境、生成/更新lock

环境迁移流程
4. 拉取包含pyproject.toml、uv.lock的项目代码;
5. 进入项目目录执行uv sync,自动创建.venv,严格按照 lock 文件复现完全一致的依赖环境;
6. 生产部署剔除开发工具:uv sync --no-dev

uvsync--no-dev# 复现环境,仅安装生产依赖

删除环境
删除环境直接删除对应环境文件夹即可。

五,python cli

是什么

可直接在终端执行的 Python CLI 工具(如 uvicorn、langgraph、pip)

用来干什么

简化用户操作,避免写python -m xxx

原理

pip和setuptools

角色分工pip是前端(负责下载、依赖解析);setuptools是一个第三方包(在site-packages中),构建后端(负责打包、编译、生成入口)。

安装策略pip优先下载预编译的Wheel (.whl)包,本质上就是 .py 文件和的c编译文件(如.pyd/.so)的压缩包,下载后直接解压到site-packages

编译场景:只有安装含 C 扩展的包(如 numpy)且找不到匹配的轮子时(.whl包),pip 才会下载源码包(.tar.gz),并调用setuptools在本地进行 C 编译生成二进制文件,构建临时whl包。

生成命令:在解压.whl后,pip 读取console_scripts配置(该配置是setuptools定义的打包规范,已提前写入Wheel包中), 在 bin/Scripts 目录生成可执行的启动器文件。

版本注意:Python 3.12+ 的虚拟环境不再默认预装setuptools,若需从源码安装或使用旧式命令,需手动pip install setuptools

核心流程

  1. 开发者本地编码 → 配置console_scripts(推荐,使用pyproject.toml) → 调用setuptools打包成.whl等文件 → 上传到 PyPI 服务器。

  2. 打包时,setuptools不会把pyproject.toml原封不动地塞进.whl包里。它会读取[project.scripts]里的配置,然后将其翻译成Wheel包标准规范要求的格式,存放在.whl包内的元数据文件夹里。

    # pyproject.toml 案例[project]name="my-tool"version="0.1.0"# 核心配置在这里[project.scripts]mycli="my_package.cli:main"

    项目目录

    my-tool/ ├── pyproject.toml# 或 setup.py└── my_package/# 包目录├── __init__.py └── cli.py
  3. 使用者激活某个环境,执行pip install xx安装解压.whl 包,解压完成后,pip读取并解析元数据中的console_scripts内容。生成启动脚本。(以Linux为例)

    #!/usr/bin/env python3# -*- coding: utf-8 -*-importreimportsysfrommy_package.cliimportmainif__name__=='__main__':sys.exit(main())
  4. 并将这个启动脚本放到 scripts 目录,也就是 和解释器、pip同一目录下

  5. 使用的时候,激活环境后,终端中敲命令myclibash找到启动脚本,因为启动脚本中要求python解释器来执行它,因此操作系统会在path 中找到解释器(也就是当前环境的解释器)执行这个启动脚本,程序就跑起来了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:23:38

零成本:2026录音转待办事项工具推荐,选对每月省十小时办公时间

先说明白核心判断 针对零成本需求,本次基于5款主流工具的当前公开版本测试得出结论:每月录音时长低于10小时的轻度用户,通义听悟免费版即可满足需求;需要零成本处理高频会议、客户访谈、拜访录音,自动提取待办的用户&a…

作者头像 李华
网站建设 2026/7/14 17:23:06

Windows Server 2012 R2 RD服务部署与RemoteApp应用发布实战指南

1. 环境准备与AD域服务安装Windows Server 2012 R2的RD服务部署必须依赖Active Directory域环境。我遇到过不少新手直接跳过这步导致后续配置失败的案例,所以先重点讲清楚这块。补丁安装是首要任务在安装AD域服务前,强烈建议先安装KB4012213补丁。这个补…

作者头像 李华
网站建设 2026/7/14 17:22:23

SNAC开发者指南:构建自定义音频压缩应用的完整步骤

SNAC开发者指南:构建自定义音频压缩应用的完整步骤 【免费下载链接】snac Multi-Scale Neural Audio Codec (SNAC) compresses audio into discrete codes at a low bitrate 项目地址: https://gitcode.com/gh_mirrors/sn/snac 想要打造专业的音频压缩应用吗…

作者头像 李华
网站建设 2026/7/14 17:22:10

Flutter---CustomScrollView的UI项目(1)

效果图详细介绍:整体分为3个部分,一个是顶部固定的信息栏,一个是滑动的列表,还有一个是底部固定的播放栏。重点内容// 理解基础布局组件 Stack( // 层叠布局:背景内容底部栏children: [Container(), // 背景层CustomSc…

作者头像 李华