项目构建工具

Python项目构建工具有很多种,其中一些常用的包括:

  1. setuptools:这是一个用于构建、分发和安装Python软件包的工具。它可以帮助你定义项目的结构、依赖关系和安装步骤。
  2. pipenv:这是一个结合了pip和虚拟环境管理的工具,可以简化项目依赖管理的过程,同时创建独立的虚拟环境。
  3. Poetry:Poetry是一个现代化的Python包管理工具,它提供了依赖管理、打包发布等功能,并且有一个易于使用的配置文件格式。
  4. tox:如果你需要在不同的Python版本下运行测试或构建项目,tox是一个很好的选择。它可以帮助你自动化这些任务,确保项目在不同环境下都能正常工作。

Poetry

Poetry是一个现代化的Python包管理工具,它提供了依赖管理、打包发布等功能,并且有一个易于使用的配置文件格式。

  • 虚拟环境管理
  • 套件相依性管理
  • 套件的打包与发布

安装Poetry

1
$ pip install poetry

创建新项目

使用以下命令创建一个名字为 my_project 的Poetry新项目

1
2
$ poetry new <my_project>
$ cd <my_project>

配置依赖项

pyproject.toml 文件是用于定义Python项目元数据和构建配置的文件,通常与现代Python构建工具(如Poetry)一起使用。记录项目信息

[tool.poetry] 部分 - 项目信息

这个部分用于指定Poetry项目的元数据,包括项目名称、版本、描述和作者等信息。

1
2
3
4
5
[tool.poetry]  
name = "my_project"
version = "0.1.0"
description = "My Python project"
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies] 部分 - 生产依赖项信息

这里定义项目的生产依赖项,可以指定Python版本和其他必需的包。

1
2
3
4
# ^ 符号表示允许安装指定包的兼容版本,但不包括主版本号的更改。
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.1"
[tool.poetry.dev-dependencies] 部分 - 开发依赖项信息

这里定义项目的开发依赖项,通常用于测试、文档生成等开发过程中需要但不会包含在最终发布中的包。

1
2
[tool.poetry.dev-dependencies]  
pytest = "^6.2"
[tool.poetry.scripts] 部分

这个部分用于定义项目的命令行脚本。

1
2
3
[tool.poetry.scripts]  
my_script = "my_package.my_module:main"
# my_script 是脚本的名称,my_package.my_module:main 是脚本的入口点
[tool.poetry.extras] 部分

这个部分用于定义项目的可选依赖项。

1
2
3
[tool.poetry.extras]  
dev = ["pytest", "flake8"]
# dev 是可选依赖项的名称,pytest 和 flake8 是依赖项的名称
[build-system] 部分
1
2
3
4
[build-system]  
requires = ["poetry>=1.0"]
build-backend = "poetry.masonry.api"
# requires 指定了构建系统所需的依赖项,build-backend 指定了构建系统的后端。

进入项目环境

1
$ poetry shell

添加依赖项

1
$ poetry add requests  

安装依赖项

1
$ poetry install

移除依赖项

1
$ poetry remove <package-name>

更新依赖项

1
$ poetry update

更新锁文件

1
$ poetry lock

查询依赖 - 显示依赖树的功能

1
2
3
$ poetry show -t
# 查看特定包是由哪个直接依赖项引入的
$ poetry show -t <package-name>

管理虚拟环境

1
2
3
4
5
6
7
8
# 创建虚拟环境  
$ poetry env use python3.8

# 激活虚拟环境
$ poetry shell

# 安装依赖项
$ poetry install

构建和发布

1
2
3
4
5
# 构建项目  
poetry build

# 发布到PyPI
poetry publish

与其他工具集成

Docker 集成
  1. 创建 Dockerfile:在项目根目录下创建一个 Dockerfile,用于构建 Docker 镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
# Dockerfile  
FROM python:3.8

WORKDIR /app

COPY pyproject.toml poetry.lock ./

RUN pip install poetry
RUN poetry install

COPY . .

CMD ["poetry", "run", "your_main_script.py"]
  1. 构建 Docker 镜像
1
$ docker build -t my_project .
  1. 运行 Docker 容器
1
$ docker run my_project
CI/CD 工具集成(以GitHub Actions为例)
  1. 创建 Workflow 文件:在项目中的 .github/workflows 目录下创建一个 YAML 文件,例如 ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# .github/workflows/ci.yml  

name: CI

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

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

- name: Install dependencies
run: poetry install

- name: Run tests
run: poetry run pytest
  1. 配置依赖项:在 pyproject.toml 文件中添加 dev-dependencies,以确保在 CI/CD 环境中安装所需的依赖项。
1
2
3
4
# pyproject.toml  

[tool.poetry.dev-dependencies]
pytest = "^6.2.4"
  1. 提交代码:将 Workflow 文件和更新的 pyproject.toml 文件提交到 GitHub 仓库中。

  2. 启用 GitHub Actions:在 GitHub 仓库的 Actions 选项卡中启用 Actions。每次推送到 main 分支时,GitHub Actions 将自动运行自动化测试。

Pipenv