Requirements.txt你真的清楚吗
创始人
2025-07-06 05:41:13
0

很多Python开源项目在环境搭建教程中都会提供requirements.txt,所以有必要搞清楚这到底有什么作用以及一些细节须知,花几分钟一起看看吧!

1.如何安装requirements.txt中的所有内容

requirements.txt中包含项目所需依赖的所有库,如:

library-one==1.0.1
library-two==3.1.4
library-three==100.1.0

要一键安装txt中所指定的3个库,我们可以运行以下命令:

pip install -r requirements.txt

这将自动安装 requirements.txt 中指定的每行库及相应版本。

2.如何生成requirements.txt

假设现在其他人需要运行自己的代码,那么需要确保两者运行环境一致,首先在项目Python环境的终端中运行如下命令:

pip freeze

该命令将在终端中打印出每个安装的每个第三方库以及相应版本,如:

absl-py==1.4.0
altair==5.0.1
anyio==3.6.2
appdirs==1.4.4
appnope==0.1.3
argon2-cffi==21.3.0

是不是感觉这就是requirements.txt文件中的内容。

现在希望将这些内容写入文本文件中,但又不想手动复制粘贴它,可以使用以下命令将其写入:

pip freeze > requirements.txt

该语句的作用是将pip freeze输出的所有内容写入名为requirements.txt的文本文件中,

这样,requirements.txt文件制作完毕,接下来是一些须知。

3.最好使用虚拟环境创建requirements.txt

当我们使用pip freeze时,每个安装的库都会出现在你的requirements.txt中。

这可能会很输出肥肠多的内容,如果项目只需要几个主要库,但requirements.txt会安装另外100个不必要的库,该怎么办?

使用 Python 虚拟环境!

python -m venv env    # create a virtual environment called 'env'
# activating our Python virtual environment

env\Scripts\activate.bat    # Windows

source env\bin\activate     # MacOS/Linux

创建新的虚拟环境后,干净又卫生,没有安装任何内容。因此,安装项目所需的主要库后使用pip freeze,最终出现在requirements.txt中的内容将仅包含这些主要内容。

4.省略requirements.txt中的版本会如何

这是一个规范的 requirements.txt:

numpy==1.23.5
pandas==1.5.2

将安装具有特定版本的numpy与pandas。

如下是一个没有版本的requirements.txt:

numpy
pandas

将安装最新版本的numpy与pandas,如果项目中的某些库是没有版本依赖的可以这样做。

5.不一定要命名为requirements.txt

pip install -r requirements.txt
  1. -r表示read
  2. requirements.txt只是一个不符合惯例命名的任意文本文件

实际上,可以将其命名为任何名称,只要它是有效的文本文件名即可,如:

pip install -r a.txt

但不建议这样做。

6.requirements.txt可以包含其他requirements.txt文件

假设我们有2个requirements.txt文件:

requirements.txt
requirements_windows.txt
  • requirements.txt包含主要内容
  • requirements_windows.txt包含专门的Windows库

我们希望requirements_windows.txt也包含requirements.txt内的内容,可以在requirements_windows.txt中这样写:

library-one
library-two
-r requirements.txt
  • 首先library-one和library-two将被安装
  • 最后requirements.txt中的所有内容也将被安装

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...