Skip to content

Python项目如何优雅的生成依赖文件

约 1083 字大约 4 分钟

Python

2025-01-06

曾经以为项目的依赖文件是每个开发者默认都会生成的。直到我发现公司有些项目,竟然没有生成依赖文件!谁了解,运行报错,添加依赖,一直循环的痛苦。今天赋闲,那我们来聊聊Python项目如何优雅的生成依赖文件。

使用命令生成依赖文件

Python项目中,生成依赖文件和通过依赖文件添加依赖都是非常方便的。

通过如下指令就生成了依赖文件requirements.txt

$ pip3 freeze > requirements.txt

执行了上面的命令后,就多了一个requirements.txt文件。文件内容格式如下:

annotated-types==0.7.0
anyio==4.6.2.post1
autopep8==2.3.1
certifi==2024.8.30
cfgv==3.4.0
chardet==5.2.0
charset-normalizer==3.4.0
click==8.1.7
distlib==0.3.9
docx==0.2.4
fastapi==0.115.2
filelock==3.16.1
flake8==7.1.1
flake8-chart==0.1.5
gunicorn==23.0.0
h11==0.14.0
hacking==7.0.0
identify==2.6.1
idna==3.10
importlib_metadata==8.5.0
isort==5.13.2
loguru==0.7.2
lxml==5.3.0
mccabe==0.7.0
mysql-connector-python==9.1.0
nodeenv==1.9.1
packaging==24.1
pillow==11.0.0
platformdirs==4.3.6
pre_commit==4.0.1
pycodestyle==2.12.1
pydantic==2.9.2
pydantic-settings==2.5.2
pydantic_core==2.23.4
pyflakes==3.2.0
pygal==3.0.5
python-docx==1.1.2
python-dotenv==1.0.1
python-multipart==0.0.12
PyYAML==6.0.2
redis==5.1.1
requests==2.32.3
sniffio==1.3.1
starlette==0.40.0
tenacity==9.0.0
typing_extensions==4.12.2
urllib3==2.2.3
uvicorn==0.32.0
virtualenv==20.26.6
zipp==3.20.2

上面是我手上一个真实项目的依赖文件内容,基本就是包和对应的版本号。

通过requirements.txt安装项目依赖,执行如下命令:

$ pip3 install -r requirements.txt

运行上面命令就将requirements.txt的依赖,安装上了。

注意 建议创建项目特有的虚拟环境,防止加入不必要的库到依赖文件中。

注意 requirements.txt只是习惯的依赖文件名称,也可以使用其他文件名称。

结合gitpre commit自动更新依赖文件

上面虽然实现了依赖文件的生成,每次更新都需要手动执行命令,不够优雅。那有没有办法自动生成依赖文件呢?答案是有,那就是结合gitpre commit自动更新依赖文件。

大概流程如下:

  1. 安装pre commit
  2. 编写生成依赖文件的脚本
  3. 配置pre commit
  4. 添加pre commitgit钩子中

1.安装pre commit

首先需要安装pre commit,执行如下命令:

$ pip3 install pre-commit

2.编写生成依赖文件的脚本

这个脚本我们可以放在项目的指定目录下,我这里放在/hooks/文件夹下,命名为auto-requirements.sh

#!/bin/zsh
###
 # @Author: matiastang
 # @Date: 2024-05-13 17:48:01
 # @LastEditors: matiastang
 # @LastEditTime: 2024-05-13 18:27:50
 # @FilePath: /mt-langchain/hooks/auto-requirements.sh
 # @Description: auto requirements
### 
# 生成requirements.txt
pip3 freeze > ./requirements.txt

这个脚本这写了一条生成依赖文件的命令,当然如果有需要可以加其他命令。或者直接是其他任务,不一定是生成依赖文件。

3.配置pre commit

在项目根目录下创建.pre-commit-config.yaml文件,文件内容如下:

repos:
  - repo: local
    hooks:
      - id: auto-requirements
        name: auto requirements
        entry: /bin/zsh ./hooks/auto-requirements.sh
        language: system
        pass_filenames: false
        always_run: true

其中entry: /bin/zsh ./hooks/auto-requirements.sh就表示执行auto-requirements.sh脚本。

4.添加pre commitgit钩子中

执行如下命令:

$ pre-commit install

如果已经添加过,但是更新了.pre-commit-config.yaml文件,可以直接更新。

$ pre-commit autoupdate

或者,清除或卸载之后再添加。

$ pre-commit clean
$ pre-commit uninstall
$ pre-commit install

执行完上面的命令后,pre commit就添加到git钩子中了。后续执行git commit命令时,就会触发pre commit,然后自动执行auto-requirements.sh脚本,生成依赖文件。如果依赖没有变更,那么文件就不会改变,不会产生新的记录,可以放心使用。

总结

自动生成依赖,省去了手动生成依赖的麻烦,而且每次提交代码都会自动生成依赖文件,再也不用担心依赖文件遗漏了。但有一点儿还是需要注意,虚拟环境不要弄错了

延伸阅读

Python 格式自动修复

Python 格式校验

Python项目如何优雅的生成依赖文件

整理头文件

参考

Github pre-commit

pre-commit文档