# Py 依赖管理
# py包仓库
PyPI(Python Package Index) (opens new window)。它是 Python 生态系统中最大的第三方包仓库,开发者可以在这里发布和搜索 Python 包。
# 依赖管理工具
# pip
特点:pip (opens new window) 是 Python 的官方包管理工具,用于安装和管理 Python 包。它支持从 PyPI(Python Package Index)安装包,并且可以处理依赖关系。
# 常用命令
pip install <package>:#安装包
pip uninstall <package>:#卸载包
pip freeze:#列出已安装的包及其版本
pip list:#列出已安装的包
pip install -r requirements.txt:#从文件安装依赖
# uv
特点:uv (opens new window) 是一个现代的 Python 包管理工具,它简化了依赖管理和项目打包的过程。uv 使用 pyproject.toml 文件来管理依赖,并支持锁定依赖版本。
# 常用命令
uv init:# 创建新的 Python 项目。
uv add:# 向项目添加依赖项。
uv remove:# 从项目中删除依赖项。
uv sync:# 将项目的依赖项与环境同步。
uv lock:# 为项目的依赖项创建 lockfile。
uv run <command>:# 在项目环境中执行命令。un run main.py
uv tree:# 查看项目的依赖关系树。
uv build:# 将项目构建到分发存档中。
uv publish:# 将项目发布到包索引。
uv tree:# 展示安装的包的树状图。
uv python install 3.10 3.11 3.12:# 安装指定版本的 Python。
# conda
特点:conda (opens new window) 是一个跨平台的包管理工具,主要用于数据科学和机器学习领域。它不仅可以管理 Python 包,还可以管理非 Python 的依赖项。
# 常用命令
conda install <package>:#安装包
conda remove <package>:#卸载包
conda list:#列出已安装的包
conda update <package>:#更新包
conda create --name <env_name>:#创建新环境
# poetry
特点:poetry (opens new window) 是一个现代的 Python 依赖管理工具,它简化了依赖管理和项目打包的过程。poetry 使用 pyproject.toml 文件来管理依赖,并支持锁定依赖版本。
# 常用命令
poetry add <package>:#添加依赖
poetry remove <package>:#移除依赖
poetry install:#安装依赖
poetry update:#更新依赖
poetry lock:#生成锁定文件
# pipenv
特点:pipenv (opens new window) 是一个结合了 pip 和 virtualenv 的工具,用于管理 Python 项目的依赖和虚拟环境。它使用 Pipfile 和 Pipfile.lock 来管理依赖。
# 常用命令
pipenv install <package>:#安装包
pipenv uninstall <package>:#卸载包
pipenv lock:#生成锁定文件
pipenv shell:#激活虚拟环境
pipenv run <command>:#在虚拟环境中运行命令
# venv
特点:venv (opens new window) 是 Python 自带的虚拟环境管理工具,用于创建隔离的 Python 环境。它通常与 pip 一起使用来管理项目依赖。
# 常用命令
python -m venv <env_name>:#创建虚拟环境
source <env_name>/bin/activate:#激活虚拟环境(Linux/Mac)
<env_name>\Scripts\activate:#激活虚拟环境(Windows)
deactivate:#退出虚拟环境
# 工具对比
| 工具 | 虚拟环境 | 依赖锁定 | 多环境支持 | 打包发布 | 适用场景 |
|---|---|---|---|---|---|
| pip | 无 | 无 | 无 | 无 | 通用 Python 项目 |
| conda | 有 | 有 | 有 | 无 | 数据科学、机器学习项目 |
| poetry | 有 | 有 | 有 | 有 | 需要简化依赖管理的项目 |
| pipenv | 有 | 有 | 有 | 无 | 需要虚拟环境和依赖管理的项目 |
| venv | 有 | 无 | 无 | 无 | 需要隔离环境的项目 |
# 选择建议
- 简单项目:使用 pip + venv。
- 复杂项目:使用 poetry 或 pipenv。
- 数据科学项目:使用 conda。
- 精确版本控制:使用 pip-tools。
# 推荐的项目结构
我们在开发Python项目时,推荐的项目结构如下:
my_project/
├── src/ # 项目源码目录
│ └── my_project/ # 项目包目录
│ ├── __init__.py # 包初始化文件
│ ├── module1.py # 模块文件
│ └── module2.py # 模块文件
├── tests/ # 测试代码目录
│ ├── __init__.py
│ ├── test_module1.py
│ └── test_module2.py
├── docs/ # 文档目录
│ └── index.md
├── scripts/ # 脚本目录
│ └── run.py
├── pyproject.toml # 项目配置文件
├── README.md # 项目说明文件
└── .gitignore # Git 忽略文件
# pyproject.toml 配置
pyproject.toml 是一个现代的项目配置文件,用以管理项目依赖,通常与 poetry 或 setuptools 等工具一起使用。下面是 pyproject.toml 的一些配置说明:
[build-system]
requires = ["poetry-core>=1.0.0"] # 指定构建系统所需的依赖
build-backend = "poetry.core.masonry.api" # 指定构建后端
[tool.poetry]
name = "my_project" # 项目名称
version = "0.1.0" # 项目版本
description = "A Python project example" # 项目描述
authors = ["Your Name <your.email@example.com>"] # 作者信息
license = "MIT" # 项目许可证
readme = "README.md" # 项目说明文件
packages = [{ include = "my_project" }] # 包含的项目包
[tool.poetry.dependencies]
python = "^3.8" # 指定 Python 版本
requests = "^2.26.0" # 项目依赖
numpy = "^1.21.0" # 项目依赖
[tool.poetry.group.dev.dependencies]
pytest = "^6.2.0" # 开发环境依赖,用于测试
black = "^21.0" # 开发环境依赖,代码格式化工具
mypy = "^0.910" # 开发环境依赖,静态类型检查工具
[tool.poetry.scripts]
my_script = "scripts.run:main" # 定义可执行脚本
[tool.black]
line-length = 88 # 代码格式化工具 black 的配置,每行最大长度
target-version = ['py38'] # 目标 Python 版本
[tool.pytest.ini_options]
minversion = "6.0" # pytest 最低版本要求
addopts = "-ra -q" # pytest 默认选项
testpaths = ["tests"] # 测试文件路径