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

时间:2019-11-14 23:21:32

标签: python bash virtualenv

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

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

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

  • 关于如何执行此操作的任何想法?
  • 请以一种非常简单的方式进行解释,因为我是Linux的新手。

1 个答案:

答案 0 :(得分:1)

您无法通过bash脚本执行此操作。 原因很简单。 一个bash脚本在一个子进程中执行,将为该子进程更改virtualenv,然后bash脚本结束,您返回到父进程并完全恢复以前的环境。

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

您可以做的是:

  • 使用bash别名
  • 使用shell函数
  • 创建一个脚本,但是用source <script_name>“调用”它

例如,您可以在~/.bashrc~/.bash_aliases(如果~/.bashrc调用的行中)添加以下行

setvenv() {
    source /path/to/your/venv_base_dir/$1/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)可能会更直观,尤其是当您给虚拟设备起有意义的短名称时。