129

我对应该将 virtualenvs 放在哪里感到困惑。

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

django-admin.py startproject djangoproject

然后我进入 djangoproject 目录并运行命令

virtualenv env

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

这是为这个特定项目创建 virtualenv 的错误位置吗?

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

有没有正确的方法来做到这一点?

4

5 回答 5

144

许多人使用virtualenvwrapper工具,它将所有 virtualenvs 保存在同一个地方(~/.virtualenvs目录),并允许创建和保存它们的快捷方式。例如,您可能会这样做:

mkvirtualenv djangoproject

然后:

workon djangoproject

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

pip freeze > requirements.txt

并分发它。这将允许使用您的项目的其他人将所有相同的要求重新安装到他们的 virtualenv 中:

pip install -r requirements.txt
于 2012-08-29T19:06:35.860 回答
31

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

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

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

请参阅:重命名 virtualenv 文件夹而不破坏它

有,--relocatable但众所周知它并不完美。

另一个小优势:您不必这样做.gitignore

将 gitignored 放在项目树本身的好处是:

  • 将相关的东西放在一起。
  • 您可能永远不会跨项目重用给定的 virtualenv,因此将其放在其他地方并没有太大优势

在我看来,这是一个令人讨厌的设计缺陷。他们应该以一种与目录在哪里无关的方式实现virutalenv,因为在树中存储更简单、更孤立。Node.js 的 NPM 包管理器没有任何问题。当我们这样做时:pip 应该默认使用本地目录,就像 NPM 一样。拥有这个单独的 virtualenv 层是不稳定的。Node.js 只需 NPM 即可完成所有工作,无需额外输入。我不敢相信我在一篇 Python 帖子上赞美 JavaScript 生态系统,但这是真的。

于 2016-05-08T14:46:21.273 回答
6

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

相关:virtualenvwrapper 是一个优秀的工具,它为常见的 virtualenv 命令提供简写。http://www.doughellmann.com/projects/virtualenvwrapper/

于 2012-08-29T19:06:42.367 回答
2

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

于 2017-07-13T10:16:20.220 回答
2

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

于 2020-05-04T18:55:53.503 回答