打造高效Python后端项目:这些工具你不能错过

尽管很多人知道我一直在使用Java,但鲜为人知的是,在过去几年里,我也一直在用Python默默地开发后端API服务器项目。在这个过程中,我探索并发现了几种极为有用的工具。它们不仅优化了我的开发流程,还特别在团队合作方面发挥了重要作用。在这篇文章中,我将分享这些工具,并解释为何它们成为我Python项目中不可或缺的一部分。

1. pip-compiler

我们通常通过简单的pip install package_name命令安装Python包,并将这些包列在项目文件夹内的"requirements.txt"文件中。但是,我的团队成员经常会对这个文件表示不解,他们反映:"这个文件列了很多内容,我却不明白我们究竟安装了哪些包。"

项目规模的不断扩大带来了依赖管理的复杂性,要清晰地识别不同库之间的依赖关系对于我们来说是一大挑战。在这种背景下,合理地管理这些依赖显得尤为重要。

在面对众多依赖管理的挑战时,我发现"pip-compilers"库极为有用。"pip-compilers"是一种工具,其独到之处在于允许开发者通过不同的文件来细分管理各个包。这样,无论是在开发还是在生产环境中,我们都能够清晰地知道每个包的用途,并了解它们的来源。这种方法极大地简化了对于项目依赖的管理,使得整个过程既高效又可靠。

以下是一个简单的使用说明。

  • Python环境中使用以下命令安装pip-compilers。

PythonCopy code

复制代码
pip install pip-tools
  • 创建原始的requirements.in文件。

    fastapi
    boto3
    beanie
    cryptography
    motor
    dependency-injector
    gunicorn
    requests

  • 将requirements.in文件编译为requirements.txt。

less 复制代码
pip-compile --output-file requirements-dev.txt [requirements.in](http://requirements.in)
  • 然后我们可以看到以下文档,并使用该文件安装Python包。
ini 复制代码
#
# 该文件由pip-compile自动生成,使用的Python版本为3.8
# 通过以下命令生成:
#
#    pip-compile --output-file=requirements-dev.txt requirements.in
#
anyio==3.6.2
    # 通过starlette依赖
beanie==1.19.1
    # 通过-r requirements.in依赖
boto3==1.26.141
    # 通过-r requirements.in依赖
botocore==1.29.141
    # 通过
    #   boto3
    #   s3transfer

...


# 以下包在requirements文件中被认为是不安全的:
# setuptools

pip-compilers的功能包含在pip-tools库中。因此,我们可以通过安装pip-tools包来使用pip-compilers。如果你需要更详细的说明,请参考仓库中的文档。

Pip-tools: pypi.org/project/pip...

2. pre-commit

在编写代码时,保持一致性和规范至关重要,这就像是我们写文章时遵循的文法规则一样。在这个过程中,pre-commit就像一个严格的老师,确保我们提交的每一行代码都符合规定的标准。它不允许任何不符合规则的代码通过,就好比老师在批改作业前,先要求每份作业的格式要统一。这样做的好处是显而易见的:它不仅提升了代码质量,还避免了那些由于格式混乱或小错误而产生的后期维护成本。

举个例子,代码格式的一致性,就像文章的排版一样,对于团队协作极为重要。一个小小的缩进错误或者多余的空白,可能看起来无伤大雅,但长此以往,会像错别字累积成语病一样,给项目带来不小的困扰。

使用pre-commit工具,就像给代码库装上了一道防护门。任何不符合预设规则的代码,都无法通过这道门。这样一来,我们就能保证只有那些精雕细琢、符合规范的代码能够被纳入代码库,就像只有经过校对无误的文章才会发表一样。

接下来,让我们动手安装pre-commit吧。按照下面的步骤,你会发现,引入这样一个工具其实是一件轻而易举的事。

  • 安装
bash 复制代码
# 使用pip
pip install pre-commit

# 将以下内容添加到你的requirements.txt文件中
pre-commit
  • 在你的项目根目录下添加".pre-commit-config.yaml"文件。
yaml 复制代码
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
        exclude: voice_biz.dmm
    -   id: check-yaml
    -   id: check-added-large-files
-   repo: https://github.com/pycqa/flake8
    rev: 6.0.0
    hooks:
    -   id: flake8
        exclude: src/tests
        additional_dependencies: [flake8-docstrings]
  • 安装git钩子脚本
sql 复制代码
pre-commit install

这样我们就完成了使用pre-commit的准备工作。

当然,你可以通过提交来测试它,但有一个简单的测试方法。

sql 复制代码
pre-commit run --all-files

使用pre-commit就好比在我们的代码库中安装了一个智能助手。在你准备提交代码的时候,它会自动检查你的包是否都被用到了。这就像在你出门前,有个助手提醒你带上钥匙和手机,防止你遗忘。这样的预先检查显著提高了代码库的整洁度和运行效率。

但pre-commit的聪明之处不止于此。它的设计允许我们根据自己的需求添加规则。就比如说,你希望每个新增的函数或类都必须有测试代码,这样可以确保代码的健壮性。那么,我们就可以为这个目标编写一个规则,让pre-commit在你提交代码前帮你检查。这就像是在我们的编程实践中添上了一道额外的质量保障。

想了解更多关于pre-commit的信息,可以访问它的官方网站:pre-commit.com

简而言之,利用pre-commit,我们不仅可以保持代码库的干净整洁,还能确保编码规范得到遵守,使得整个团队的代码质量都得到提升。

相关推荐
weixin_387545644 分钟前
深入解析 AI Gateway:新一代智能流量控制中枢
人工智能·gateway
im_AMBER12 分钟前
学习日志05 python
python·学习
大虫小呓18 分钟前
Python 处理 Excel 数据 pandas 和 openpyxl 哪家强?
python·pandas
聽雨23721 分钟前
03每日简报20250705
人工智能·社交电子·娱乐·传媒·媒体
哪 吒30 分钟前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
程序猿阿越32 分钟前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序员爱钓鱼33 分钟前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
二川bro40 分钟前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
acstdm1 小时前
DAY 48 CBAM注意力
人工智能·深度学习·机器学习
Jiude1 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构