侧边栏壁纸
博主头像
MobotStone - 技术宅博主等级

行动起来,活在当下

  • 累计撰写 191 篇文章
  • 累计创建 80 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

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

MobotStone
2023-11-10 / 0 评论 / 1 点赞 / 100 阅读 / 4316 字

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

1. pip-compiler

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

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

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

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

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

pip install pip-tools

  • 创建原始的requirements.in文件。

fastapi  
boto3  
beanie  
cryptography  
motor  
dependency-injector  
gunicorn  
requests

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

pip-compile --output-file requirements-dev.txt [requirements.in](http://requirements.in)

  • 然后我们可以看到以下文档,并使用该文件安装Python包。

#
# 该文件由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: https://pypi.org/project/pip-tools

2. pre-commit

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

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

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

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

  • 安装

# 使用pip
pip install pre-commit

# 将以下内容添加到你的requirements.txt文件中
pre-commit

  • 在你的项目根目录下添加“.pre-commit-config.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钩子脚本

pre-commit install

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

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

pre-commit run --all-files

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

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

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

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

1