为啥要在 Python 的虚拟环境中创建 requirements.txt 文件?

Posted

技术标签:

【中文标题】为啥要在 Python 的虚拟环境中创建 requirements.txt 文件?【英文标题】:Why would you create a requirements.txt file in a virtual environment in Python?为什么要在 Python 的虚拟环境中创建 requirements.txt 文件? 【发布时间】:2017-12-03 07:14:50 【问题描述】:

我下载了一个 Python 项目,它包含一个虚拟环境和一个 requirements.txt 文件。为什么你需要两者?据我所知,虚拟环境已经包含了所需的模块。知道这种组合何时以及为何有用吗?

【问题讨论】:

一个独立的 venv 不会包含你的模块,它必须使用一个需求列表并且通常会从 requirements.txt 中读取它 @idjaw 我认为他们所说的项目包含安装了所有模块的 virtualenv。 这种组合永远不会有用。事实上,将 venv 保存在 repo 中并不是一个好主意。那是因为 venv 和安装的软件包依赖于底层操作系统。虽然项目应该尽可能独立于操作系统。 @MosesKoledoye 对。然后是解释不是一个好主意的问题,而是“安装”环境而不是仅仅转移一个venv。 @idjaw 是的,对。 @freakish 已经提供了一个指针。他们会发现这很有用:***.com/questions/6590688/… 【参考方案1】:

虽然这在技术上是可行的,但我找不到任何好的理由。两者兼有令人困惑,因为尚不清楚哪一个是“主人”。而且您必须(或不必?)担心已安装的包和 requirements.txt 文件之间的一致性。

还有很多情况下venv和安装包依赖于底层操作系统,它们有二进制文件、不同的布局等。一般建议编写独立于操作系统的代码。

总而言之,我会坚持使用 requirements.txt 文件并从项目的 repo 中删除任何 venv 文件夹。

【讨论】:

这正是发生在我身上的事情。这让我很困惑 :) 很棒的解释,谢谢! 后续问题:您更喜欢将 venv 文件夹保存在 Python 项目开发文件夹中还是其他文件夹中? @Engo 我个人使用 virtualenvwrapper,它默认将每个 venv 安装在 ~/.virtualenvs 中。像魅力一样工作。【参考方案2】:

您不能将 virtualenv 目录与您的项目一起分发,因为内容可能会因目标操作系统和操作系统版本而异。具体来说,包含安装在 Ubuntu 14.04 上的已编译组件的库的 virtualenv 将不同于安装在 Ubuntu 16.04 上的等效 virtualenv。

相反,您应该分发您的 requirements.txt 文件(只是一个约定,您可以使用您想要的任何文件名),以便最终用户能够在他的机器上重新创建一个 virtualenv。

【讨论】:

为什么交付一个包含所有必需模块的 virtualenv 是不好的?这对我来说不是很清楚...... 不同系统上的 Virtualenvs 有不同的布局,它们可能包含无法在不同机器上运行的已编译二进制文件。

以上是关于为啥要在 Python 的虚拟环境中创建 requirements.txt 文件?的主要内容,如果未能解决你的问题,请参考以下文章

anaconda中创建虚拟环境

Python中创建虚拟环境(virtualenv模块)

Mac中anaconda中创建虚拟python环境,配置flask

python环境配置步骤二:Windows中创建虚拟环境安装Pytorch并在PyCharm中配置虚拟环境

PyCharm中创建项目时,在所创建的python虚拟环境下的pip失效

在 PyCharm 中创建虚拟环境失败