Bash 激活脚本(来源)python virtualenv 使用参数

Bash script to activate (source) python virtualenv using arguments

我的主目录中有一个 python virtualenv 文件夹,其中有很多 python 虚拟环境,我想制作一个脚本 运行 这个命令:

$ source ~/Envs/env_that_i_specify_with_args/bin/activate.

使用 if else 会起作用,但我想要在 ~/Envs/ 目录中查找的内容,这样当我添加新环境时,我不必手动编辑脚本,但我可以只使用参数来在另一个目录中执行该命令。(类似于 $ activateEnv -1,到 运行 我的 ~/Envs/ directory, $ activateEnv -2 中第一个文件夹中的命令到第二个文件夹中的 运行,等等)

您不能制作一个 bash 脚本来执行此操作。 原因很简单。 bash 脚本在子进程中执行,该子进程的 virtualenv 将被更改,然后 bash 脚本结束,您返回到父进程并恢复与之前完全相同的环境。

换句话说: 子进程永远无法更改父进程的环境。

您可以做的是:

  • 使用 bash 别名
  • 使用 shell 函数
  • 创建一个脚本,但是 'call' 它具有 source <script_name>

例如,您可以将以下行添加到您的 ~/.bashrc~/.bash_aliases(如果它被 ~/.bashrc 调用)

setvenv() {
    source /path/to/your/venv_base_dir//bin.activate
}

例如,如果您关注 venvs

/path/to/your/venv_base_dir/venvone
/path/to/your/venv_base_dir/venvtwo
/path/to/your/venv_base_dir/venvthree

然后您只需输入 setvenv venvthree 即可激活。

您问的是激活第一个、第二个还是第三个 venv 谁是第一个?按字母顺序排在第一位?第一个按创建时间排序? 我认为使用目录名称(venvonevenvtwovenvthree)可能会更直观,特别是如果您为 venvs 提供有意义的短名称。