虚拟世界应该在哪里创建?

我不知道该把虚拟世界放哪儿。

在我的第一个 django 项目中,我使用以下命令创建了该项目

django-admin.py startproject djangoproject

然后我将光盘插入 djangoproject 目录并运行命令

virtualenv env

它创建了与内部 djangoproject目录相同级别的虚拟环境目录。

在这里为这个特定的项目创建 Virtual alenv 是错误的吗?

我得到的印象是,大多数人将所有的 Virtual alenv 放在一个完全不同的目录中,例如 ~/virtualenvs,然后使用 viralenvwrapper 在它们之间来回切换。

有正确的方法吗?

72327 次浏览

很多人都使用 虚拟包装器工具,它将所有的 Virtual alenv 保存在同一个位置(~/.virtualenvs目录) ,并允许创建和保存它们的快捷方式。例如,你可以这样做:

mkvirtualenv djangoproject

之后:

workon djangoproject

将 viralenv 目录保留在项目本身中可能是一个坏主意,因为您不想分发它(它可能是特定于您的计算机或操作系统的)。相反,使用 Pip保存一个 requments.txt 文件:

pip freeze > requirements.txt

这将允许其他使用您的项目的用户重新安装所有相同的需求到他们的 Virtual alenv 中,包括:

pip install -r requirements.txt

普遍接受的放置它们的位置与 viralenvwrapper 的默认安装放置它们的位置相同: ~/.virtualenvs

相关信息: viralenvwrapper 是一个优秀的工具,它为常见的 viralenv 命令提供了快捷方式

更改 viralenv 目录的位置会破坏它

这是将目录放在存储库树之外的一个优点,例如,将目录放在 ~/.virtualenvsvirutalenvwrapper之下。

否则,如果将它保留在项目树中,则移动项目位置将破坏 viralenv。

见: 重命名一个 viralenv 文件夹而不破坏它

--relocatable,但它是众所周知的不是完美的。

另一个小优点: 你不必 .gitignore它。

把它放在项目树本身的好处是:

  • 把相关的东西放在一起。
  • 您可能永远不会在项目之间重用给定的 viralenv,因此将它放在其他地方并没有多大好处

在我看来,这是一个恼人的设计缺陷。他们应该以一种不管目录在哪里的方式实现 virutalenv,因为存储在树中只是更简单和更隔离。Js 的 NPM 包管理器完成这项工作没有任何问题。同时,我们应该: pip 应该像 NPM 一样默认使用本地目录。使用这个独立的虚拟层是不可靠的。Js 只有 NPM,它不需要额外的输入即可完成所有工作。我不敢相信我在一篇 Python 文章中赞扬 JavaScript 生态系统,但这是真的。

如果您使用 pyenv install Python,那么 Pyenv-viralenv将是最佳实践。如果设置 .python-version文件,它可以在您更改工作文件夹时自动激活或停用虚拟 env。Pyenv-virtualenv还将所有虚拟 env 放入 $HOME/.pyenv/versions文件夹。

根据我的个人经验,我建议将所有虚拟环境组织在一个目录中。除非某人有非常敏锐的记忆力,并且能够记住分散在文件系统中的文件/文件夹。 不太喜欢使用其他工具来管理虚拟环境。在 VSCode 中,如果我配置包含所有虚拟环境的(python.venvPath)目录,它可以自动识别所有虚拟环境。