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

2024-09-27 00:11:49 发布

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

我的主目录中有一个python virtualenv文件夹,其中有许多python虚拟环境,我想创建一个运行以下命令的脚本:

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

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

  • 你有什么想法吗
  • 请用一种相当简单的方式来解释它,因为我对Linux相当陌生

Tags: 命令目录env脚本文件夹sourcethatvirtualenv
1条回答
网友
1楼 · 发布于 2024-09-27 00:11:49

你不能让bash脚本这样做。 原因很简单。 bash脚本在子进程中执行,该子进程的virtualenv将被更改,然后bash脚本结束,您返回到父进程并恢复与以前完全相同的环境

换句话说: 子进程永远不能更改父进程的环境

你能做的是:

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

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

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

例如,如果你跟在维尼后面

/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)可能会更直观,特别是如果你给你的venv起了一个有意义的短名称

相关问题 更多 >

    热门问题