尽管很多人知道我一直在使用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,我们不仅可以保持代码库的干净整洁,还能确保编码规范得到遵守,使得整个团队的代码质量都得到提升。