放弃pip 拥抱Poetry

文摘   2024-11-19 14:45   湖北  

在Python开发中,依赖管理一直是一个重要话题。从最初的pip requirements.txtvirtualenv,再到现在的Poetry,Python包管理工具在不断进化。本文将详细介绍Poetry这个强大的依赖管理工具,以及如何使用它来提升您的Python项目开发体验。


为什么选择Poetry?

相比传统的依赖管理方式,Poetry具有以下优势:

  • 依赖解析更智能



    • 自动处理依赖冲突

    • 保证依赖版本兼容性

    • 生成确定性的依赖锁定文件

  • 项目环境管理更简单



    • 自动创建和管理虚拟环境

    • 与pyenv完美集成

    • 支持多Python版本

  • 包发布更便捷



    • 内置打包功能

    • 支持直接发布到PyPI

    • 支持构建wheel包

Poetry安装与配置

安装Poetry

# 官方推荐的安装方式
curl -sSL https://install.python-poetry.org | python3 -

# 或者使用pip安装
pip install poetry

基础配置

# 配置虚拟环境在项目目录下
poetry config virtualenvs.in-project true

# 配置PyPI镜像源(可选)
poetry config repositories.tuna https://pypi.tuna.tsinghua.edu.cn/simple

Poetry项目实战

1. 创建新项目

# 创建新项目
poetry new my-project

# 项目结构
my-project/
├── pyproject.toml
├── README.md
├── my_project/
│ └── __init__.py
└── tests/
└── __init__.py

2. 配置项目信息

# pyproject.toml
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "A sample Python project managed by Poetry"
authors = ["Your Name <your.email@example.com>"]
readme = "README.md"
packages = [{include = "my_project"}]

[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.28.0"
pandas = "^2.0.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.3.1"
black = "^23.3.0"
flake8 = "^6.0.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

3. 依赖管理常用命令

# 安装依赖
poetry install

# 添加新依赖
poetry add requests

# 添加开发依赖
poetry add --group dev pytest

# 更新依赖
poetry update

# 删除依赖
poetry remove requests

# 查看已安装的包
poetry show

# 导出requirements.txt
poetry export -f requirements.txt --output requirements.txt

4. 虚拟环境管理

# 激活虚拟环境
poetry shell

# 在虚拟环境中运行命令
poetry run python script.py

# 查看虚拟环境信息
poetry env info

最佳实践

1. 版本控制策略

# 推荐的版本限制方式
[tool.poetry.dependencies]
python = ">=3.8,<4.0"
requests = "^2.28.0" # 允许补丁版本更新
pandas = "~2.0.0" # 只允许补丁版本更新
flask = "2.0.1" # 锁定具体版本

2. 多环境配置

# 区分开发、测试和生产依赖
[tool.poetry.dependencies]
python = "^3.8"
flask = "^2.0.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.3.1"
black = "^23.3.0"

[tool.poetry.group.test.dependencies]
pytest-cov = "^4.0.0"
pytest-mock = "^3.10.0"

[tool.poetry.group.prod.dependencies]
gunicorn = "^20.1.0"

3. CI/CD集成

# .github/workflows/python-app.yml
name: Python application

on: [push]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'

- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -

- name: Install dependencies
run: poetry install

- name: Run tests
run: poetry run pytest

高级技巧

1. 脚本管理

[tool.poetry.scripts]
start = "my_project.main:main"
dev = "my_project.main:dev"
test = "pytest:main"

2. 私有仓库配置

# 添加私有仓库
poetry config repositories.private https://private.pypi.org/simple/

# 配置认证信息
poetry config http-basic.private username password

3. 依赖组管理

# 安装特定组的依赖
poetry install --with test,dev

# 不安装某些组的依赖
poetry install --without dev

常见问题解决

  • 锁文件冲突


    # 更新锁文件
    poetry lock --no-update
  • 依赖安装失败


    # 清理缓存
    poetry cache clear . --all
  • 版本冲突解决


    # 查看依赖树
    poetry show --tree

字节笔记本
专注于科技领域的分享,AIGC,全栈开发,产品运营
 最新文章