Python一行命令实现自动生成 requirements.txt

 更新时间:2026年03月04日 09:12:35   作者:林九生  
一个清晰、准确的requirements.txt文件能够记录项目所依赖的所有第三方库及其版本,下面我们就来看看如何使用Python一行命令实现自动生成 requirements.txt吧

在 Python 项目开发中,我们经常需要生成 requirements.txt 文件,用于:

  • 项目部署
  • Docker 构建
  • 服务器上线
  • 团队协作

很多人直接使用:

pip freeze > requirements.txt

但这样会把当前环境的所有包都导出来,包括根本没用到的库,文件又大又乱。

今天给大家介绍一个更优雅、更智能的工具 —— pipreqs

一、什么是 pipreqs

pipreqs 是一个根据项目源码中 import 自动生成 requirements.txt 的工具。

它只会生成你真正用到的依赖,不会把整个虚拟环境都打包进去。

相比 pip freeze

工具特点
pip freeze导出全部环境依赖
pipreqs只导出项目实际使用依赖

二、安装 pipreqs

pip install pipreqs

说明:

  • 直接使用 pip 安装即可
  • 支持 Python 3.x
  • 建议在虚拟环境中使用

三、一行命令生成 requirements.txt

进入你的项目目录,然后执行:

pipreqs . --force

参数说明:

参数作用
.当前目录
--force强制覆盖已存在的 requirements.txt

执行后,项目根目录就会自动生成:

requirements.txt

就这么简单!

四、pipreqs 工作原理

pipreqs 会:

  • 扫描当前目录所有 .py 文件
  • 解析 import 语句
  • 匹配对应 PyPI 包名
  • 自动生成 requirements.txt

例如:

import requests
import numpy
import pandas

生成结果:

numpy==1.26.4
pandas==2.2.1
requests==2.31.0

只包含你真正用到的依赖

五、常用高级用法

1.指定生成路径

pipreqs ./your_project

2.忽略某些目录

pipreqs . --ignore tests

3.使用国内镜像(推荐)

如果你在国内,建议加上:

pipreqs . --pypi-server https://pypi.tuna.tsinghua.edu.cn/simple

这样解析更快。

六、pipreqs vs pip freeze 对比实战

假设你的虚拟环境里安装了 100 个包,但项目只用了 5 个。

使用 pip freeze:

100 个依赖

使用 pipreqs:

5 个依赖

优点:

  • 更干净
  • 更专业
  • 更适合开源项目
  • Docker 镜像更小

七、注意事项

  • pipreqs 只能识别 import 语句
  • 动态导入可能识别不到
  • 有些包名和 import 名不一致(例如 Pillow

遇到问题可以手动补充。

八、最佳实践建议

开发阶段:使用 pipreqs 生成干净依赖

部署阶段:再用 pip freeze 做最终锁版本

这样最稳。

九、总结

两行命令解决依赖管理问题:

pip install pipreqs
pipreqs . --force
  • 自动分析项目
  • 只生成真实依赖
  • 更专业的 requirements.txt
  • 部署更轻量

十、为什么 pipreqs 识别不到数据库依赖

很多同学会遇到一个问题:明明项目用了数据库,结果生成的 requirements.txt 里没有 psycopg2

例如项目里使用了 PostgreSQL:

import psycopg2

但有时候生成的文件里却没有:

psycopg2

这是为什么呢?

原因分析

1.动态导入或框架间接依赖

如果你没有直接写:

import psycopg2

而是使用了:

  • Django
  • SQLAlchemy
  • Flask + 插件

例如:

DATABASES = {
    "ENGINE": "django.db.backends.postgresql"
}

这类字符串配置方式,pipreqs识别不到的

因为它只分析 import 语句。

2.驱动是可选依赖

很多 ORM 框架不会强制安装数据库驱动。

例如:

  • Django 不会自动安装 psycopg2
  • SQLAlchemy 也不会自动安装数据库驱动

驱动属于:可选运行时依赖

而不是源码级 import 依赖。

解决方案

方案一:手动补充(推荐)

直接在生成后手动添加:

psycopg2-binary==2.9.9

生产环境推荐:

psycopg2

开发环境推荐:

psycopg2-binary

方案二:显式 import(不太优雅)

你可以在某个文件里写:

import psycopg2

这样 pipreqs 就能识别到了。

但这种方式:

  • 不够优雅
  • 会污染代码结构

不太推荐。

方案三:使用 pipreqs + pip freeze 结合

最佳实践流程:

# 第一步:生成干净依赖
pipreqs . --force

# 第二步:确认数据库驱动
pip freeze | grep psycopg2

如果缺失,手动追加即可。

延伸说明:其他常见识别不到的库

除了 psycopg2,以下场景也常见:

场景举例
数据库驱动mysqlclient、psycopg2
WSGI 服务器gunicorn
ASGI 服务器uvicorn
任务队列celery
生产工具redis

这些通常:

  • 运行时依赖
  • 部署依赖
  • 不一定在源码中 import

十一、深入理解依赖分类

其实依赖可以分为三类:

代码依赖(pipreqs 能识别)

import requests
import pandas

运行依赖(pipreqs 识别不到)

数据库驱动

WSGI 服务器

消息队列客户端

系统依赖(pip 管不了)

PostgreSQL 服务

Redis 服务

Nginx

十二、最佳企业实践建议

在实际公司项目中,推荐做法:

开发阶段

pipreqs 生成干净 requirements.txt

测试 / 发布阶段

pip freeze > requirements-prod.txt

或者:

使用 Poetry / Pipenv 管理完整锁版本

这样:

  • 开发清爽
  • 部署稳定
  • CI/CD 更安全

十三、总结

pipreqs 非常适合:

  • 开源项目
  • 教学项目
  • 轻量项目
  • 想要干净依赖的人

但记住一句话:pipreqs 只认 import,不认运行环境。

数据库驱动、服务器组件这类依赖,一定要人工确认。

以上就是Python一行命令实现自动生成 requirements.txt的详细内容,更多关于Python生成requirements.txt文件的资料请关注脚本之家其它相关文章!

相关文章

  • Python如何操作docker redis过程解析

    Python如何操作docker redis过程解析

    这篇文章主要介绍了Python如何操作docker redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python描述器descriptor详解

    Python描述器descriptor详解

    这篇文章主要向我们详细介绍了Python描述器descriptor,需要的朋友可以参考下
    2015-02-02
  • 教你怎么用python绘制dotplot

    教你怎么用python绘制dotplot

    这篇文章主要介绍了教你怎么用python绘制dotplot,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • 详解OpenMV图像处理的基本方法

    详解OpenMV图像处理的基本方法

    这篇文章主要介绍了OpenMV图像处理的基本方法,包括感光元件的相关知识介绍,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • 利用Python实现在同一网络中的本地文件共享方法

    利用Python实现在同一网络中的本地文件共享方法

    今天小编就为大家分享一篇利用Python实现在同一网络中的本地文件共享方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python中halcon环境配置的详细步骤

    python中halcon环境配置的详细步骤

    这篇文章主要为大家详细介绍了python中halcon环境配置的详细步骤,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解一下
    2025-06-06
  • PyPy 如何让Python代码运行得和C一样快

    PyPy 如何让Python代码运行得和C一样快

    这篇文章主要介绍了如何让Python代码运行得和C一样快,由于 PyPy 只是 Python 的一种替代实现,大多数时候它都是开箱即用,无需对 Python 项目进行任何更改。它与 Web 框架 Django、科学计算包 Numpy 和许多其他包完全兼容,推荐大家多多使用
    2022-01-01
  • Python如何根据页码处理PDF文件的内容

    Python如何根据页码处理PDF文件的内容

    在Python中,fitz库可以用于多种任务,如打开PDF文件、遍历页面、添加注释、提取文本、旋转页面等,此外,它还可以用于在PDF页面上添加高亮注释、提取图像等操作,这篇文章主要介绍了Python根据页码处理PDF文件的内容,需要的朋友可以参考下
    2024-06-06
  • Python curl_cffi库从入门到精通详解

    Python curl_cffi库从入门到精通详解

    curl_cffi 是一个Python库,它通过CFFI提供了对curl-impersonate的绑定,使得HTTP客户端能够模仿浏览器的TLS/JA3和HTTP/2指纹,这篇文章主要介绍了Python curl_cffi库从入门到精通的相关资料,需要的朋友可以参考下
    2025-09-09
  • python Django框架中的嵌套序列化器详解

    python Django框架中的嵌套序列化器详解

    在Web开发领域,创建和使用API(应用程序编程接口)是很常见的,Django Rest Framework(DRF)是一个强大的工具包,在DRF中,一个关键概念是序列化器,在本文中,我们将深入研究Django中嵌套序列化器的概念以及它们如何促进复杂数据关系的处理,需要的朋友可以参考下
    2023-10-10

最新评论