【问题标题】: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 已经提供了一个指针。他们会发现这很有用:stackoverflow.com/questions/6590688/…

标签: python virtualenv requirements.txt


【解决方案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 有不同的布局,它们可能包含无法在不同机器上运行的已编译二进制文件。
猜你喜欢
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2014-01-24
  • 2021-02-06
  • 2017-01-17
  • 2019-10-13
  • 2019-03-19
  • 2021-10-11
相关资源
最近更新 更多