为什么在Python虚拟环境中创建requirements.txt文件?

5
我下载了一个Python项目,其中包含虚拟环境和一个requirements.txt文件。为什么需要这两个东西?据我所知,虚拟环境已经包含所需的模块。你有什么想法,何时以及为什么这种组合会有用呢?

一个独立的虚拟环境不会为您包含模块,它必须使用要求列表,并通常从requirements.txt读取。 - idjaw
1
@idjaw 我认为他们所说的项目包含了安装了所有模块的 virtualenv。 - Moses Koledoye
2
这种组合永远不会有用。事实上,在存储库中保留venv并不是一个好主意。这是因为venv和已安装的软件包取决于底层操作系统。而项目应尽可能独立于操作系统。 - freakish
@MosesKoledoye 对的。然后就是解释这样做不是一个好主意,而是应该“安装”环境,而不仅仅是转移venv。 - idjaw
1
@idjaw 是的,没错。@freakish 已经提供了一个指针。他们会发现这个有用:https://dev59.com/WWw15IYBdhLWcg3wd7pj - Moses Koledoye
@freakish 请用回答的方式解释一下,以帮助解决这个问题。我认为在这种情况下,将其作为一个回答会更有帮助,以便结束它。 - idjaw
2个回答

8
虽然在技术上这是可能的,但我没有找到任何好理由去这样做。同时拥有两者会引起混淆,因为不清楚哪一个是“主要的”。并且你必须(或者不必?)担心已安装包和requirements.txt文件之间的一致性。
此外,venv和许多情况下已安装的包依赖于底层操作系统,它们有二进制文件、不同的布局等。通常建议编写操作系统无关的代码。
总之,我建议坚持使用requirements.txt文件,并从项目存储库中删除任何venv文件夹。

这正是我遇到的问题,让我感到困惑 :) 很棒的解释,谢谢! - Engo
跟进问题:您更喜欢将venv文件夹放在Python项目开发文件夹中还是放在另一个文件夹中? - Engo
2
@Engo 我个人使用 virtualenvwrapper,它默认将每个虚拟环境安装在 ~/.virtualenvs 中。非常好用。 - freakish

1
您不能将virtualenv目录与项目一起分发,因为其内容可能会因目标操作系统和操作系统版本的不同而有所差异。特别是,在Ubuntu 14.04上安装了编译组件的库的virtualenv将与在Ubuntu 16.04上安装的等效virtualenv不同。
相反,您应该分发您的requirements.txt文件(只是一种约定,您可以使用任何文件名),以便最终用户能够在他的计算机上重新创建一个virtualenv。

为什么将包括所有所需模块的virtualenv打包交付是不好的?我不太明白... - Engo
2
不同系统上的虚拟环境布局不同,它们可能包含编译的二进制文件,在不同的计算机上运行时可能会出现问题。 - bakatrouble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接