Pypi(全称 Python Package Index )是 Python 官方的第三方软件包仓库,软件包是以构建后的分发包 (.whl 和 .tar.gz)形式存在。
- pip install 默认就是去 PyPI 上搜索、下载并安装这个包的。
- pip install 把从远程仓库下载得到的 .whl 顺便解压部署到 site-packages。
build命令:Build(构建) 指的是将你的原始源代码转换成可分发的标准安装包的过程。
- 源代码按照 Python 社区标准"打包"成
.whl【ZIP格式】和.tar.gz两个文件。 - Build 不是把 Python 编译成机器码(不像 C/C++),而是把散落的文件按 PEP 标准打包归档。纯 Python 包的
.whl里仍然是.py文件,只是被组织成了标准目录结构。
工具:本质上是一个以解决特定任务为目标、通过命令行或脚本调用的可执行程序 。它不是一个技术类型,而是一个使用形态 ------同样的 .py 代码,封装方式不同,可以是库、可以是工具、也可以是 Web 服务。
1.conda
环境隔离【虚拟环境】、依赖管理【能安装非 Python 底层依赖】、多语言支持。
| 工具 | 管理范围 | 优势 | 短板 |
|---|---|---|---|
| Conda | Python + 系统底层库 (CUDA/MKL 等) | 科学计算、深度学习、多 Python 版本 | 普通轻量小库更新慢 |
| pip | 仅 Python 纯代码包 | 第三方 Python 库最全、更新快 | 无法解决 C/C++ 底层依赖 |
安装:
bash
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
bash Miniconda3-latest-MacOSX-x86_64.sh
# conda 临时不生效
conda deactivate
2.pip包管理
bash
# 1. 创建虚拟环境 .venv 里面包含独立Python环境需要的所有文件
python3 -m venv .venv
# 2. 激活环境(Mac / Linux)
source .venv/bin/activate
# 激活后终端会出现 (.venv),此时 pip 只会装在这个环境里
pip install requests
# 3. 退出虚拟环境
deactivate
# 不用了直接删除整个文件夹即可清理
rm -rf .venv
它和 conda 的区别:
venv:Python 原生自带,只管理 Python 与 Python 包,不能管理 CUDA、C 库、不同 Python 大版本。conda:独立工具,可以安装不同版本 Python、底层编译依赖(cuda、ffmpeg 等)。
有了虚拟环境保证每个项目拥有专属的Python运行环境,不同环境下相同包不同版本就不会出现冲突等问题。
python
pip install flask #全局安装flask模块
pip show flask #展示模块flask的详情:版本号、包所在的全局路径
sys.path是 Python 的模块搜索路径列表 ,Python 导入import xxx时,会按顺序遍历这个列表里的文件夹,寻找你要导入的包 / 脚本。
pip install只会把第三方包安装到 site-packages,site-packages 只是 sys.path 其中一条路径。
将依赖列表方便准确的分享:
python
pip3 freeze -> requirements.txt
pip3 install -r requirements.txt #安装requirements.txt中依赖项
缺点:freeze指令无法区分直接依赖项 or 间接依赖项。例如:pip3 install flask 只有一个依赖,但是requirements.txt文件包含间接依赖,具体如下,这样依赖项比较多时分享安装很麻烦。
python
blinker==1.9.0
click==8.4.2
Flask==3.1.3
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==3.0.3
Werkzeug==3.1.8
并且uninstall卸载依赖时只能卸载flask依赖包,其产生的间接依赖并不会被卸载。
优化方案之pyproject.toml文件【pyproject.toml管理项目依赖】:
python
[project]
name = "python"
dependencies = [
"Flask==3.1.3"
]
项目根目录下执行以下命令安装:pip3 install -e . 。
pyproject.toml管理项目依赖的缺点:不能通过pip3等命令安装依赖,只能手动查找官方相关依赖的版本号,并手动写入pyproject.toml文件中。
解决办法:uv or poetry or pdm 命令工具替代pip3等相关命令。
3.UV
uv or poetry or pdm 这些命令其实是对pip3命令的高级封装,其核心目的就是将我们从繁琐的环境和依赖中解放出来。使用这些高级命令时项目中必须将解释器配置成虚拟环境下的解释器,而非全局解释器。
python
uv add flask # 该命令直接包含以下命令所有功能
python -m venv .venv
source .venv/bin/avtivate
edit pyproject.toml
pip3 install -e .
========================================
uv sync #当拿到别人项目后执行该命令则自动基于pyproject.toml文件创建虚拟环境、各项依赖等
uv run xxx.py #等价于 python xx.py
当然在uv环境下同样可以执行python相关命令。
python
uv python list #输出uv支持的所有Python版本
uv python install cpython-版本号 #uv安装指定版本的python
uv run -p 3.12 xx.py #指定python版本运行脚本程序
uv run -p 3.12 python #进入交互页面
==========================================================
uv init -p 3.13 #在项目根目下自动生成 Python 项目基础骨架,包含pyproject.toml、虚拟环境等
uv add flask #安装依赖,并且将其添加到pyproject.toml文件中
uv run xx.py # 因为Init指定了版本号,uv运行脚本时无需指定版本号,直接运行脚本
uv tree #打印依赖树
ruff check #检查代码是否符合编码规范
uv add ruff --dev #将工具ruff作为依赖下载下来,--dev 避免打包时将ruff工具打包进去,进而携带到线上环境
uv remove ruff --dev
uv tool install ruff # 安装工具的方式:安装工具到系统中,这些工具脱离当前工程独立运行。此种方式安装的工具整个系统可用
uv tool list
将代码编译成可以直接运行的工具: