我的主目录中有一个python virtualenv文件夹,我在其中有很多python虚拟环境,我想制作一个运行此命令的脚本:
$ source ~/Envs/env_that_i_specify_with_args/bin/activate.
使用if if else可以工作,但是我想要的东西可以在~/Envs/
目录中查找,这样当我添加新的env时,我不必手动编辑脚本,但是我可以使用参数来执行该脚本另一个目录中的命令。(类似$ activateEnv -1
,可以在我的~/Envs/ directory, $ activateEnv -2
的第一个文件夹中运行该命令,而在第二个目录中运行,等等)
答案 0 :(得分:1)
您无法通过bash脚本执行此操作。 原因很简单。 一个bash脚本在一个子进程中执行,将为该子进程更改virtualenv,然后bash脚本结束,您返回到父进程并完全恢复以前的环境。
换句话说: 子进程永远无法更改父进程的环境。
您可以做的是:
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,谁会是第一个?按字母顺序第一个?第一个按创建时间排序?
我认为使用目录名(venvone
,venvtwo
,venvthree
)可能会更直观,尤其是当您给虚拟设备起有意义的短名称时。