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

2024-06-01 03:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还比较陌生,但已经构建了一些小项目。我被教导过,并且一直使用以下命令来启动虚拟环境:echo layout python3 > .envrc然后direnv allow。在

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


Tags: 项目name命令echovirtualenvvenv虚拟环境direnv
1条回答
网友
1楼 · 发布于 2024-06-01 03:49:42

这两个命令的作用完全不同。在

venv

python -m venv <env_name>命令creates a virtual environment作为文件系统中充满文件的子目录。当它完成后,一个新的虚拟环境就在那里等待你激活和使用,但是这个命令实际上还没有激活它。在

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

激活命令只改变当前的命令行shell会话。这就是为什么每次启动shell会话时都必须重新激活虚拟环境。这种烦恼也是direnv所要解决的。在

direnv和{}

首先,关于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进入一个看似无辜的目录,然后从别人的.envrc地雷中得到令人讨厌的惊喜。allow命令专门白列目录的.envrc文件,如果发现.envrc文件自allow编辑后发生了更改,则会将其取消列出

最后,回到direnv

我没有使用direnv,但是^{}是一个direnv命令,用于调整环境,以便用语言开发,在本例中激活了python3虚拟环境。这些文件暗示,这比仅仅是这样更“有用”,但他们没有详细说明。(另外,您还可以编写自己的direnv函数,该函数名为python3,它的功能完全不同。)

所有这一切的目标是,一旦您cd进入Python虚拟环境的目录,就自动启用它。这消除了一种人为错误,即忘记启用虚拟环境。有关详细信息,请参阅Richard North的“Practical ^{}”,尤其是“Automatic Python ^{} switching”部分。在

(不)优势和意见

如果这是您经常犯的错误,您相信direnv命令永远不会成为恶意.envrc文件的牺牲品(或者“有益地”扰乱您正在处理的东西),那么它对您来说可能是值得的。在

我认为direnv(除了安全问题之外)最大的缺点是,它训练您忘记使用Python虚拟环境的一个重要步骤。。。也就是说,实际上是在使用虚拟环境。对于它不告诉你就默默提供的任何其他“帮助”来说,这要加倍。(我一直在引号中加上“help”这一事实说明了我对这种实用程序的看法。)

如果您发现自己在某个未安装direnv的地方工作,那么您很可能会忘记激活您的虚拟环境,或者忘记{}为您做的其他事情。而你忘记如何去做的可能性更大。在

相关问题 更多 >