Python中requirements.txt的全面解析与最佳实践

许南星
许南星
发布时间:2026-10-14| 5人浏览过
原创

本文详解Python项目中requirements.txt的核心作用,涵盖手动维护与自动生成的多种方法(如pip freeze、pipreqs、pigar等),对比各工具优劣。重点解析多环境依赖管理策略,并深入辨析requirements.txt与setup.py的功能边界及共存必要性,通过Flask案例说明实际应用场景,为开发者提供规范的依赖管理最佳实践。

requirements.txt简介

简介

在Python项目中,必须包含一个requirements.txt文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署。

requirements.txt基本写法

其主要写法如下所示:


pip freeze > requirements.txt # 生成requirements.txt
pip install -r requirements.txt # 从requirements.txt安装依赖

支持的写法包括:


-r base.txt # base.txt下面的所有包
pypinyin==0.12.0 # 指定版本(最日常的写法)
django-querycount>=0.5.0 # 大于某个版本
django-debug-toolbar>=1.3.1,<=1.3.3 # 版本范围
ipython # 默认(存在不替换,不存在安装最新版)

自动生成依赖文件的工具对比

除了手动编写,还可以使用第三方工具自动生成。

需要注意的是,pip freeze命令会附带一些不必要的包,以及某些包依赖的其他包。

pipreqs可以自动分析项目中引用的包,但对Django项目自动构建时会忽略Mysql包,且版本信息可能不准确;此外,联网搜索时若遇到404错误会直接报错退出。

pigar的功能与上述类似,会显示包被项目文件引用的位置(这似乎是一个伪需求,因为通过搜索即可解决),同样存在404报错的问题。

pip-tools通过第三方文件生成requirements.txt,这实际上增加了一层转换,直接编写可能更为简便。

多环境依赖管理最佳实践

推荐用法:

一般项目会分为开发环境、测试环境、生产环境等,各环境依赖的包可能不同。推荐在文件夹下为每个环境建立一个requirements.txt文件,公有的包存放在base.txt中供引用。


➜ meeting git:(sync) ✗ tree requirements -h
requirements
├── [ 286] base.txt
├── [ 80] local.txt
└── [ 28] production.txt

鉴于上述自动化工具存在诸多不便,仍推荐手动维护依赖列表。毕竟在pip安装后手动编辑依赖文件并非难事。

setup.py与requirements.txt的区别

setup.py与requirements.txt的区别:

setup.py文件用于管理模块,你可以将项目打包为模块上传到PyPI,或者将项目作为模块放入Python的系统加载模块目录中。

requirements.txt文件仅列举项目引用的非本项目依赖,除此之外没有其他作用。

因此,可以看出这两个文件并没有冲突关系,而且有很大共存的必要。

  1. 如果你的项目需要保存为系统模块,或者可安装为系统命令,那么setup.py就必不可少了。
  2. 如果你的项目是可以直接运行的,那么requirements.txt也是必不可少的。
  3. 如果你两种功能都需要,那么两个文件都不能少。

Flask案例:两种功能的共存

是否存在需要这两种功能的情况?

当然有,而且很多,例如Flask就支持两种方式:

  1. 以系统命令的方式启动,在Flask 0.11.1中新加入了一个Click包,它可以让你setup之后以命令的方式运行。
  2. 直接运行,传统的Flask启动方式一般是app.run()或者python manage.py runserver。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助。如果有任何疑问,欢迎大家留言交流,谢谢大家对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。