如何建立一个完美的 Python 项目 | 干货
发布日期:2021-04-30 21:10:36 浏览次数:105 分类:精选文章

本文共 2159 字,大约阅读时间需要 7 分钟。

Python 开发最佳实践指南

在开始一个新的 Python 项目时,选择优秀的库和工具至关重要。这些工具能够帮助您节省大量时间,并提升开发效率。以下是为您的项目建立高质量开发环境的步骤指南。

1. 安装开发工具

首先,安装必要的开发工具。我们将使用以下工具:

  • Pipenv:管理项目依赖和虚拟环境。
  • Black:自动代码格式化工具。
  • Isort:管理导入部分。
  • Flake8:代码风格检查工具。
  • Mypy:静态类型检查器。
  • Pytest:测试框架。
  • Pytest-cov:测试覆盖率统计工具。
  • pre-commit:Git 预提交钩工具。

安装命令

pipx install pipenv black isort flake8 mypy pytest pytest-cov --dev

2. 配置项目

创建一个新目录并初始化项目:

mkdir project
cd project
pipenv install --dev

配置 setup.cfg

在项目根目录下创建 setup.cfg 文件:

[requires]
python = ">=3.8"
[tool:pytest]
testpaths = test/
[isort]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88
[flake8]
ignore = E203, E266, E501, W503
max-line-length = 88
max-complexity = 18
select = B, C, E, F, W, T, R

3. 配置 Git 预提交钩

.pre-commit-config.yaml 文件中添加以下内容:

repos:
- repo: local
hooks:
- id: isort
name: Isort
stages: [commit]
entry: pipenv run isort
types: [python]
- id: black
name: Black
stages: [commit]
entry: pipenv run black
types: [python]
- id: flake8
name: Flake8
stages: [commit]
entry: pipenv run flake8
types: [python]
exclude: setup.py
- id: mypy
name: Mypy
stages: [commit]
entry: pipenv run mypy
types: [python]
pass_filenames: false
- id: pytest
name: Pytest
stages: [commit]
entry: pipenv run pytest
types: [python]
- id: pytest-cov
name: Pytest
stages: [push]
entry: pipenv run pytest --cov --cov-fail-under=100
types: [python]
pass_filenames: false

4. 使用 Cookiecutter 生成项目

通过 Cookiecutter 模板,您可以快速生成一个包含所有配置和工具的项目:

pipx run cookiecutter gh:sourcery-ai/python-best-practices-cookiecutter

填写项目名称和仓库名称,Cookiecutter 将为您生成一个完整的项目模板。

5. 集成到编辑器

为了实时反馈,您可以将这些工具集成到您的编辑器中:

  • Vim:使用 ale 插件运行 Flake8、Black、Isort 和 Mypy。
  • VS Code:通过扩展运行这些工具。

6. 提交代码

每次提交前,pre-commit 钩将自动运行所有检查工具,确保代码质量。

git commit -m "提交说明"

7. 测试

确保每次提交都有足够的测试覆盖率:

pipenv run pytest --cov --cov-fail-under=100

8. 持续集成

配置 CI 工具(如 GitHub Actions)运行自动化测试和覆盖率检查。

通过以上步骤,您可以建立一个高质量、高效率的开发环境,确保代码的可读性、可维护性和质量。

上一篇:Dubbo架构以及调用流程
下一篇:灵魂拷问:如何检查Java数组中是否包含某个值 ?

发表评论

最新留言

感谢大佬
[***.8.128.20]2026年06月08日 03时33分28秒