【问题标题】:Why shouldn't I place my project files within my venv folder? [closed]为什么我不应该将我的项目文件放在我的 venv 文件夹中? [关闭]
【发布时间】:2019-06-17 13:06:44
【问题描述】:

这个问题Where do I put my python files in the venv folder? 的最常见答案是,您不应该将自己的文件放在 venv 目录中。

最有力的论点就是不要将自己的文件与外来文件混在一起,这很奇怪,因为通常开发人员会包含很多外来文件或代码或库,以免重新发明轮子。所以我认为这不是一个真正的好点。

另一个论点是

它提供了一个隔离的环境,您可以在其中下载不同版本的 python 包并为您的项目运行它。因此,不要在您的虚拟环境中放置任何东西。保持清洁。

相反,我认为将代码放入 venv 中是 最好的

  • 我用--copies 创建了我的venv,所以我的venv-dir 物理上包含了运行我的实际项目代码所需的所有东西。 python 安装并没有那么那么大。
  • venv 包含完全包(无论是下载的,还是自己编写的通用打包代码)完全为实际项目代码的 testet 适用版本。哪个也可能适合或不适合其他项目代码,但这并不重要,因为 this 项目的所有内容都在那里/优化/安装。
  • 整个 venv 目录都在版本控制之下,所以我基本上可以通过 subversion 而不是 pip 卸载一个包。
  • 我什至可以通过 svn 将包括项目代码在内的整个 venv 部署到另一台机器上(当然,如果它“足够相似”......)并直接将我需要的所有东西放在一个地方。

最后的主要论点:我的项目代码只有在加载特定的 venv 时才会运行,因为一般安装不“知道”其中安装的包。

那么:如果项目代码没有它就无法运行,那么我的 venv 文件夹中的 source 文件夹有什么不好?

【问题讨论】:

  • “因为通常开发人员会包含很多外部文件或代码或库以不重新发明轮子” - 您的代码使用 venv 的内容这一事实并不意味着您应该 将您的代码物理插入到 venv 中。你已经使用了很多东西,而没有将自己插入其中,不是吗?
  • 虚拟环境文件夹类似于/usr/lib/python;它存储由您的代码导入但不属于您的代码的部分的文件。您不会将项目文件存储在/usr/lib/python 中;也不要将它们存储在您的虚拟环境中。另外:为什么将 venv 文件夹置于源代码管理之下?它是一个派生的工件,根据需要从requirements.txt 之类的东西创建,可以(并且应该)在源代码控制之下。

标签: python virtualenv python-venv


【解决方案1】:

您的代码所依赖的代码(顺便说一下,不一定是 python,许多包实际上包含 c 和 c++ 代码)有时会针对不同的硬件和操作系统构建不同的代码,一旦安装了一个包就意味着它是构建的对于特定的运行时,环境绑定到安装它的系统类型。

如果您想“冻结”应用程序依赖项的状态,最佳做法是使用requirements 文件,它可以轻松启用依赖项解析。 此外,您可以强制使用specific python interpreters

如果您想发布一个应用程序并确保它在不同系统上的运行方式完全相同,我建议您查看containers

【讨论】:

  • 谢谢,“非纯 python 包”的论点让我不知何故;)我什至想仔细看看 docker :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2019-01-10
  • 2012-08-10
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多