打造高效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,我们不仅可以保持代码库的干净整洁,还能确保编码规范得到遵守,使得整个团队的代码质量都得到提升。

相关推荐
秀儿还能再秀4 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
weixin_4526006912 分钟前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪
学术搬运工12 分钟前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
右恩27 分钟前
AI大模型重塑软件开发:流程革新与未来展望
人工智能
图片转成excel表格1 小时前
WPS Office Excel 转 PDF 后图片丢失的解决方法
人工智能·科技·深度学习
阿_旭1 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
幸运的星竹1 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
ApiHug1 小时前
ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
人工智能·spring boot·spring·ai编程·apihug
杨哥带你写代码1 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_1 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端