虚拟环境:python -m venv VS echo layout python3

时间:2016-05-17 23:46:47

标签: python virtualenv

我对python很新,但已经建立了一些小项目。我已经教过并且一直使用以下命令来启动虚拟环境:echo layout python3 > .envrc然后direnv allow

使用python -m venv <virtualenv name>echo layout有什么区别或优势?

1 个答案:

答案 0 :(得分:5)

这两个命令完全不同。

venv

python -m venv <env_name>命令creates a virtual environment作为文件系统中充满文件的子目录。完成后,会有一个新的虚拟环境准备好供您激活和使用,但此命令实际上尚未激活

激活虚拟环境以便使用它是一个单独的步骤。执行此操作的命令取决于您使用的操作系统和哪个shell(请参阅&#34;命令以激活虚拟环境&#34;上面链接的文档中的表)。

激活命令仅更改当前命令行shell会话。这就是您必须在启动的每个shell会话中重新激活虚拟环境的原因。这种烦恼也是direnv要解决的问题。

direnv.envrc

首先,关于echo命令...

在MS-DOS和Unix / Linux(以及可能是最新版本的Macintosh)中,echo layout python3只发出一个字符串"layout python3"

>echo命令的输出重定向到文件,在本例中为.envrc。重定向会创建文件(如果文件尚未存在),然后用该字符串替换其内容(如果有)。最终结果是当前工作目录中的文件只包含:

layout python3

.envrc文件和direnv allow

.envrcdirenv应用程序使用的配置文件。只要您cd进入包含.envrc文件的目录,direnv就会读取它并执行内部发现的direnv指令。

direnv allow是一项安全功能。由于恶意.envrc文件几乎可以隐藏在任何地方(特别是在/var/tmp/这样的世界可写目录中),你可以cd进入一个看似无辜的目录并从其他人那里得到令人讨厌的惊喜#39 ; .envrc地雷。 allow命令专门用白名单列出了目录的.envrc文件,如果.envrc文件发现allow文件已发生变化,则明显取消列出该文件direnv

最后,回到direnv

我没有使用direnv,但layout <language>是一个direnv命令来调整您的环境以便用语言进行开发,在这种情况下激活Python 3虚拟环境。文档提示它更多&#34;有帮助&#34;不仅如此,他们也没有详细说明。 (另外,您可以编写自己的python3函数cd来执行完全不同的操作。)

所有这一切的目标是在direnv进入其目录后自动启用Python虚拟环境。这消除了一种人为错误,即忘记启用虚拟环境。有关详细信息,请参阅Richard North&#34; Practical direnv&#34;,尤其是&#34; Automatic Python virtualenv switching部分。

(Dis-)优点和意见

如果这是您经常犯的错误,您相信.envrc命令永远不会成为恶意{{1}的牺牲品}文件(或其他&#34;帮助&#34;弄乱你正在处理的事情),那么它可能是值得的。

我认为direnv的最大缺点(除了安全隐患)是它会让你忘记使用Python虚拟环境中的一个重要步骤 ...即,实际上使用虚拟环境。对于其他任何&#34;帮助&#34;它默默地提供而不告诉你。 (事实上​​,我一直在引用&#34;帮助&#34;在引号中应该建议我对这样的实用程序的看法。)

如果您发现自己在direnv未安装的地方工作,那么您将忘记激活您的虚拟环境,或忘记其他任何direnv已被遗忘的可能性很大。为你做你甚至忘记如何这样做的可能性更大。