测试学习记录,仅供参考!
在Python项目中,requirements.txt 是一个文本文件,用于记录项目所依赖的第三方库和版本信息的一种常用方式,通常由开发者使用特定的命令自动生成或者是手动创建;它可以让其他开发者部署环境快速安装项目所需的依赖项;在 Python 开发中,管理项目的依赖关系非常重要;一个清晰、准确的 requirements.txt 文件能帮助开发者了解项目所需的库及其版本,能够快速搭建项目环境;可以方便地在其他环境中安装相同的依赖,确保项目在不同环境中的依赖库版本一致,减少因环境差异引发的问题,方便项目的部署和维护;
生成项目所需的依赖requirements.txt文件
要生成 requirements.txt 文件,可以使用 pip 工具;pip 是 Python 的包管理器,它可以用于安装、卸载和管理 Python 包,或者在项目根目录下创建一个名称为 requirements.txt 的纯文本文件,再将项目所依赖的所有 Python 包及其版本号写入此文件中,在 requirements.txt 文件中,每一行代表一个依赖库及其版本号;生成 requirements.txt 文件的方法有好几种,自行选择合适的即可;
一、 使用 pip freeze
pip freeze 命令可以列出当前环境中安装的所有包及其版本;若已经在虚拟环境或全局环境中安装了所有需要的依赖包,可以直接使用此命令来生成 requirements.txt 文件,这是最基本最常用的方法,比较简单,不需要额外的其他工具,不过不推荐使用;适用于快速原型开发型项目;
打开进入终端窗口或命令提示符,进入到所在项目根目录
pip freeze > requirements.txt

此命令会将当前环境中安装的所有包及其版本号输出到一个新生成的名称为 requirements.txt的文件中,可以选择将这个文件用于备份或与他人共享你的项目依赖;但是只能列出当前Python环境中的包,若有多个环境或者使用虚拟环境,建议使用其他方法;
重新加载项目,会发现在项目根目录下多了一个requirements.txt 文件,将项目拷贝到新环境中的时候要带上此文件;

在新环境安装依赖包
在新环境中通过 requirements.txt 文件可以直接安装模块所有依赖;
注意要先切换到 requirements.txt 文件的上级目录,即项目根目录;
-r 遍历并安装 requirements.txt 中的包;
pip install -r requirements.txt
ps:建议使用国内镜像源安装(自行选择)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 参考
pip install -i 镜像源 -r 新环境项目根目录\requirements.txt
特点
基于当前虚拟环境中的所有已安装包生成依赖文件,更全面,但可能包含一些不需要的包;
列出当前环境中所有已安装的包及其精确版本号;
可能包含一些当前项目并不必要的包(例如开发工具或其他项目的依赖,不区分项目依赖和全局依赖)
二、 使用 pipreqs 工具
pipreqs 是一个可以根据项目文件夹中的代码自动生成 requirements.txt 文件的 Python 工具;它会扫描代码中的 import 语句并生成相应的依赖项;pipreqs 是一个非常有用的工具,可以扫描项目目录,自动生成 Python 项目所需的依赖库列表,在多人协作的项目中对于管理项目依赖非常有帮助;
安装工具
自行选择;
pip install pipreqs



使用
原理:pipreqs 会递归地扫描当前目录及其子目录下的所有 Python 文件,分析其中的所有 import 语句,从而确定项目所依赖的库,匹配已安装的包及其版本信息,并生成一个 requirements.txt 文件;
|------------------------|------------------------------------------------------------------------------------------------------------------------------------|
| 常用选项详解(仅参考) | 说明(仅供参考) |
| --savepath <file> | 指定生成的 requirements.txt 文件路径,将需求列表保存到指定文件中; |
| --mode <scheme> | 启用动态版本控制,支持 <compat>(兼容模式)、<gt> (大于等于) 或 <no-pin>方案; |
| --encoding <charset> | 为文件打开使用编码参数;指定文件编码(默认: utf8); |
| --debug | 打印调试信息; |
| --ignore <dirs>... | 忽略指定目录(多个目录用逗号分隔),忽略额外的目录,每个目录用逗号分隔; |
| --no-pin | 不固定版本号(只生成包名),忽略输出软件包的版本 |
| --use-local | 仅优先使用本地已安装的包信息版本,而不是查询 PyPI; |
| --pypi-server <url> | 使用自定义 PyPI 服务器; |
| --print | 将需求列表输出到标准输出; |
| --froce | 覆盖现有的 requirements.txt 文件; |
| --diff <file> | 将 requirements.txt 中的模块与项目导入的模块进行比较; |
| --clean <file> | 清理 requirements.txt,移除未在项目中导入的模块; |
| --proxy <url> | 使用代理,将参数传递给 requests 请求库;亦可在终端中设置环境参数: export HTTP_PROXY="http://10.10.1.10:3128" export HTTPS_PROXY="https://10.10.1.10:1080" |
| --scan-notebooks | 在 Jupyter Notebook 文件中查找导入; |
| --no-follow-links | 不跟随项目中的符号链接; |
在项目根目录下使用,或在 pycharm 的 terminal(终端) 命令窗口执行;

pipreqs .
pipreqs ./

./ 表示当前目录;
--encoding=utf8 支持 UTF-8 编码;
--force 强制覆盖已有的 requirements.txt 文件;
pipreqs ./ --encoding=utf8

pipreqs 指定文件目录
pipreqs E:\Users\webuiauto
如果项目根目录下已存在 requirements.txt 文件,会报错并建议使用 --force 参数来覆盖;可以强制执行覆盖、比对差异以及清除不再使用的依赖项;
pipreqs . --encoding=utf8 --force
pipreqs ./ --encoding=utf8 --force

亦或者只生成不带版本号的库名,--no-pin 参数表示用于生成不带版本号的 requirements.txt 文件;
pipreqs . --mode=no-pin

其他用法
pipreqs . --mode=compat

pipreqs . --mode=gt

pipreqs . --savepath=指定文件路径
pipreqs . --savepath=E:\Users\webuiauto\requirements.txt
pipreqs . --force --savepath=E:\Users\webuiauto\requirements.txt
pipreqs ./ --encoding=utf8 --force --mode=gt --savepath=E:\Users\webuiauto\requirements.txt

根据依赖清单安装模块
生成 requirements.txt 文件后,在新环境中部署项目时,可以使用命令一键安装项目所需的所有依赖库;
pip install -r requirements.txt
实际应用
# 进入项目目录
cd 项目根目录
# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 安装项目依赖
pip install -r requirements.txt # 如果有现有依赖
# 开发过程中添加新包...
# 生成新的 requirements.txt
pipreqs . --encoding=utf8 --force
# 检查生成的文件
cat requirements.txt
通过合理使用 pipreqs工具,可以更方便地管理 Python 项目的依赖,保持项目依赖的整洁性和准确性,提高项目的可移植性和部署效率;比较适合团队协作和项目部署场景;适用新项目开发;
特点
根据项目代码中的 import 语句来分析和生成依赖,比较轻量,但可能遗漏通过其他方式加载的依赖;
局限性
动态导入问题:主要通过静态分析import语句来确定依赖项,对于一些动态导入的情况可能无法准确识别;
虚拟环境依赖:只能分析当前项目代码中的导入语句,对于虚拟环境中安装但项目代码未使用的库,不会包含在生成的requirements.txt文件中;
三、 手动实操
在项目根目录下手动创建一个 requirements.txt 文件(自行选择合适的路径),适用于项目依赖比较少或者需要精细控制版本;
版本规范:
==:固定版本(例如numpy==1.24.4);
>=:最低版本(例如pytest>=7.0.0);
~=:兼容版本(例如requests~=2.30.0 表示 2.30.x);
>=,<:指定版本范围(例如pytest>=7.0.0,<8.0.0 );
用空行分隔不同功能的库(如开发库、测试库等等)
四、 其他
烦请自行学习了解其他方式方法;
|--------------|--------------|--------------|-------------|
| 方法 | 优点 | 缺点 | 适用场景 |
| pip freeze | 简单快速,无需其他工具 | 全部依赖,包含间接依赖 | 小型项目,快速原型开发 |
| pipreqs | 精准导出实际项目使用的库 | 需额外安装工具,有局限性 | 新项目开发 |
| 手动更新 | 完全控制版本和注释 | 需手动更新 | 建议自行选择 |
| 其他 | | | |
注意事项:
requirements.txt 文件应该仅包含运行项目所必需的包;不要包括只用于开发或测试的包;
如果不需要精确指定版本号,可以省略版本号;但指定版本号可以保证环境一致性;
对于大型项目,可能需要将开发和生产环境的依赖分开管理;
例如,可以分别有一个 requirements-prod.txt requirements-dev.txt requirements-test.txt 用于正式环境、开发环境和测试环境等等;建议文件名称仍为 requirements.txt ;
使用虚拟环境(如 项目 venv 或 基础 conda)可以避免依赖包与系统级别的 Python 环境发生冲突,同时也使依赖管理更加容易;建议在虚拟环境中生成 requirements.txt,以避免包含全局环境中的无关依赖;
使用 requirement.txt 的常见问题与解决
在使用 requirement.txt 的过程中,有的第三方库在安装时会因为网络问题下载失败、或者版本冲突等等原因导致安装无法完成,建议可以通过更换下载源、手动处理版本冲突等方法来解决此类问题;requirement.txt 是 Python 开发者日常工作中的得力助手,掌握它的安装与使用,能让项目的依赖管理变得轻松有序。无论是团队协作,还是个人项目的迁移,它都能发挥重要作用。
未完待续。。。