Cd 到虚拟环境而不是采购它

Cd to virtual environment instead of sourcing it

我想知道 'cd' 直接进入虚拟环境是否与采购虚拟环境是一回事。也就是说,

  1. source <venv_name>/bin/activate
  2. cd <venv_name>/bin/

(1)和(2)一样吗?即,所有可见的东西 (1) 在 (2) 中是否也可见?

这不是一回事。

  1. source <venv_name>/bin/activate

这会更改站点包的解析位置。它通过一个非常简单的 hack 来实现这一点:在环境变量 ($PATH) 上添加 venv 的 bin 目录,这会影响 python 命令解析的位置。

  1. cd <venv_name>/bin/

将目录更改为 <venv_name>/bin 不会 使安装在 venv(位于 ../lib)中的软件包可用于导入.命令 python 仍将解析为 /usr/local/bin/python(或系统 python 解释器所在的任何位置)并且解释器仍将使用系统站点包。您不会看到 venv 的库。

检查 virtualenv 内部和外部 python -m site 的输出以查看差异。

Is (1) the same as (2)? I.e., is everything visible (1) also visible in (2)?

没有。这两个命令做完全不同的事情。

虚拟环境不是您可以 "go in" 的 "thing"。当您获取虚拟环境激活脚本时,几乎唯一要做的就是设置一些环境变量。

如果您不想运行激活脚本,您可以手动设置这些变量。但是,您不能使用 cd 命令来完成此操作。