我对python很新,但已经建立了一些小项目。我已经教过并且一直使用以下命令来启动虚拟环境:echo layout python3 > .envrc
然后direnv allow
。
使用python -m venv <virtualenv name>
与echo layout
有什么区别或优势?
答案 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
.envrc
是direnv
应用程序使用的配置文件。只要您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部分。
如果这是您经常犯的错误,和您相信.envrc
命令永远不会成为恶意{{1}的牺牲品}文件(或其他&#34;帮助&#34;弄乱你正在处理的事情),那么它可能是值得的。
我认为direnv
的最大缺点(除了安全隐患)是它会让你忘记使用Python虚拟环境中的一个重要步骤 ...即,实际上使用虚拟环境。对于其他任何&#34;帮助&#34;它默默地提供而不告诉你。 (事实上,我一直在引用&#34;帮助&#34;在引号中应该建议我对这样的实用程序的看法。)
如果您发现自己在direnv
未安装的地方工作,那么您将忘记激活您的虚拟环境,或忘记其他任何direnv
已被遗忘的可能性很大。为你做你甚至忘记如何这样做的可能性更大。