# 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) 是一个结合了 pipvirtualenv 的工具,用于管理 Python 项目的依赖和虚拟环境。它使用 PipfilePipfile.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 是一个现代的项目配置文件,用以管理项目依赖,通常与 poetrysetuptools 等工具一起使用。下面是 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"]  # 测试文件路径