虚拟环境:python -m venv VS echo layout python3
Virtual Environments: python -m venv VS echo layout python3
我是 python 的新手,但已经构建了一些小项目。我被教导并一直使用以下命令来启动虚拟环境:echo layout python3 > .envrc
然后是 direnv allow
.
使用 python -m venv <virtualenv name>
与 echo layout
有何区别或优势?
这两个命令做完全不同的事情。
venv
python -m venv <env_name>
命令 creates a virtual environment 作为文件系统中充满文件的子目录。完成后,一个新的虚拟环境已准备好供您激活和使用,但此命令实际上尚未 激活。
激活虚拟环境以便您可以使用这是一个单独的步骤。执行此操作的命令取决于您使用的操作系统和 shell(请参阅上面链接的文档中的 "Command to activate virtual environment" table)。
激活命令仅改变您的当前命令行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
文件几乎可以隐藏在任何地方(尤其是在 world-writable 目录中,如 /var/tmp/
),你可以 cd
进入一个看似无辜的目录并得到一个令人讨厌的惊喜来自别人的 .envrc
地雷。 allow
命令专门将目录的 .envrc
文件列入白名单,如果发现 .envrc
文件自 allow
ed 以来发生了更改,则显然会取消列出该文件。
最后,回到direnv
我不使用 direnv
,但 layout <language>
是一个 direnv
命令来调整你的环境以使用 语言 进行开发,在本例激活一个 Python 3 虚拟环境。文档暗示它 "helpful" 不止于此,但他们没有详细说明。 (另外,您可以编写自己的 direnv
函数,调用 python3
来做一些完全不同的事情。)
所有这些的目标是在您 cd
进入其目录后立即自动启用您的 Python 虚拟环境。这消除了一种人为错误,即忘记启用虚拟环境。有关详细信息,请参阅 Richard North 的“Practical direnv
", especially the "Automatic Python virtualenv
switching 部分。
(Dis-)优点和意见
如果这是您经常犯的那种错误,和您相信 direnv
命令永远不会成为恶意 .envrc
的牺牲品文件(或者 "helpfully" 弄乱你正在处理的东西),那么它对你来说可能是值得的。
我看到 direnv
最大的缺点(除了安全隐患)是 它会让你忘记使用 [=] 的重要步骤 115=] 虚拟环境...即,实际上 使用 虚拟环境。对于它在不告诉您的情况下默默提供的任何其他 "help",这会增加一倍。 (我一直把 "help" 放在引号中的事实应该表明我对这样的实用程序的看法。)
如果您发现自己在某处工作时未安装 direnv
,您很可能会忘记激活您的虚拟环境,或者忘记 direnv
一直在做的任何其他事情你。而且您忘记 如何 的可能性更大。
我是 python 的新手,但已经构建了一些小项目。我被教导并一直使用以下命令来启动虚拟环境:echo layout python3 > .envrc
然后是 direnv allow
.
使用 python -m venv <virtualenv name>
与 echo layout
有何区别或优势?
这两个命令做完全不同的事情。
venv
python -m venv <env_name>
命令 creates a virtual environment 作为文件系统中充满文件的子目录。完成后,一个新的虚拟环境已准备好供您激活和使用,但此命令实际上尚未 激活。
激活虚拟环境以便您可以使用这是一个单独的步骤。执行此操作的命令取决于您使用的操作系统和 shell(请参阅上面链接的文档中的 "Command to activate virtual environment" table)。
激活命令仅改变您的当前命令行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
文件几乎可以隐藏在任何地方(尤其是在 world-writable 目录中,如 /var/tmp/
),你可以 cd
进入一个看似无辜的目录并得到一个令人讨厌的惊喜来自别人的 .envrc
地雷。 allow
命令专门将目录的 .envrc
文件列入白名单,如果发现 .envrc
文件自 allow
ed 以来发生了更改,则显然会取消列出该文件。
最后,回到direnv
我不使用 direnv
,但 layout <language>
是一个 direnv
命令来调整你的环境以使用 语言 进行开发,在本例激活一个 Python 3 虚拟环境。文档暗示它 "helpful" 不止于此,但他们没有详细说明。 (另外,您可以编写自己的 direnv
函数,调用 python3
来做一些完全不同的事情。)
所有这些的目标是在您 cd
进入其目录后立即自动启用您的 Python 虚拟环境。这消除了一种人为错误,即忘记启用虚拟环境。有关详细信息,请参阅 Richard North 的“Practical direnv
", especially the "Automatic Python virtualenv
switching 部分。
(Dis-)优点和意见
如果这是您经常犯的那种错误,和您相信 direnv
命令永远不会成为恶意 .envrc
的牺牲品文件(或者 "helpfully" 弄乱你正在处理的东西),那么它对你来说可能是值得的。
我看到 direnv
最大的缺点(除了安全隐患)是 它会让你忘记使用 [=] 的重要步骤 115=] 虚拟环境...即,实际上 使用 虚拟环境。对于它在不告诉您的情况下默默提供的任何其他 "help",这会增加一倍。 (我一直把 "help" 放在引号中的事实应该表明我对这样的实用程序的看法。)
如果您发现自己在某处工作时未安装 direnv
,您很可能会忘记激活您的虚拟环境,或者忘记 direnv
一直在做的任何其他事情你。而且您忘记 如何 的可能性更大。