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++ 底层依赖 |
安装:
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh bash Miniconda3-latest-MacOSX-x86_64.sh # conda 临时不生效 conda deactivate必要性:
- uv/pip只能安装 Python 包。如果某个 Python 包依赖系统级的共享库如
libgdal,ffmpeg,cuda-toolkit,mkl,你必须自己在操作系统层面手动安装它们,或者祈祷 pip 下载的 wheel 包里捆绑了所有动态链接库。 - Conda:它是一个通用的包管理器。它可以安装 Python 解释器本身,也可以安装 C/C++ 编译器、CUDA 运行时、R 语言、PostgreSQL 客户端等。
# 新建一套隔离的 Python、pip、各类依赖包,不同环境包互不干扰,是运行环境,非项目目录 conda create -n myenv python=3.10 # 创建环境时直接安装包 conda create -n myenv python=3.10 numpy pandas scikit-learn # 激活 / 退出环境 conda activate myenv # deactivate 命令后不需要显式提供环境名 conda deactivate # 查看当前所有环境列表 conda env list # 或 conda info --envs # 克隆已有环境 conda create -n new_env --clone old_env # 删除环境 conda remove -n myenv --all # 导出环境配置(推荐用显式依赖而非全量导出) conda env export > environment.yml # 完整导出(含版本号) conda env export --from-history > env.yml # 仅导出手动安装的包(更干净) # 从文件创建环境 conda env create -f environment.yml ====================== 以下为包管理命令 # 在当前环境中安装包 conda install numpy pandas # 安装指定版本 conda install numpy=1.24.3 # 从特定 channel 安装 conda install -c conda-forge gdal # 卸载包 conda remove numpy # 更新包 conda update numpy # 更新单个包 conda update --all # 更新环境中所有包 # 搜索包(查看可用版本和来源) conda search numpy # 查看已安装的包 conda list # 当前环境 conda list -n myenv # 指定环境当激活某个环境后【执行命令 conda activate langchain_v1.2】终端会显示该环境名,所以conda deactivate 不需要显式指定环境名,该命令执行完毕后终端就不会显示该环境名。
1.1.仓库
在 Conda/Anaconda 生态中,Channel(频道)本质上就是一个软件包的仓库源。你可以把它理解为手机上的“应用商店”或 Linux 中的“软件源”。Conda 从你配置的 Channel 中搜索、下载和安装包。
Anaconda 的专属商业仓库 defaults:
https://repo.anaconda.com/pkgs/main https://repo.anaconda.com/pkgs/r #R语言商业仓库 https://repo.anaconda.com/pkgs/msys2 # 仅 Windows社区仓库 (conda-forge):开源免费、与 defaults 高度兼容,但混用时偶尔可能出现依赖冲突。
# 从 conda-forge 安装 pandas conda install -c conda-forge pandas # 同时从多个 channel 搜索(按优先级从左到右) conda install -c pytorch -c nvidia pytorch-cuda #查看当前配置的 Channel conda config --show channels #永久添加 Channel(推荐) # 添加 conda-forge 并设为高优先级 conda config --add channels conda-forge conda config --set channel_priority strict2.pip包管理
# 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运行环境,不同环境下相同包不同版本就不会出现冲突等问题。
pip install flask #全局安装flask模块 pip show flask #展示模块flask的详情:版本号、包所在的全局路径
sys.path是 Python 的模块搜索路径列表,Python 导入import xxx时,会按顺序遍历这个列表里的文件夹,寻找你要导入的包 / 脚本。
pip install只会把第三方包安装到 site-packages,site-packages 只是 sys.path 其中一条路径。
将依赖列表方便准确的分享:
pip3 freeze -> requirements.txt pip3 install -r requirements.txt #安装requirements.txt中依赖项缺点:freeze指令无法区分直接依赖项 or 间接依赖项。例如:pip3 install flask 只有一个依赖,但是requirements.txt文件包含间接依赖,具体如下,这样依赖项比较多时分享安装很麻烦。
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管理项目依赖】:
[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命令的高级封装,其核心目的就是将我们从繁琐的环境和依赖中解放出来。使用这些高级命令时项目中必须将解释器配置成虚拟环境下的解释器,而非全局解释器。
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相关命令。
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将代码编译成可以直接运行的工具: