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
中第一个文件夹中的命令到第二个文件夹中的 运行,等等)
- 关于如何做到这一点有什么想法吗?
- 请以相当简单的方式解释一下,因为我对 Linux 还很陌生。
您不能制作一个 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 谁是第一个?按字母顺序排在第一位?第一个按创建时间排序?
我认为使用目录名称(venvone
、venvtwo
、venvthree
)可能会更直观,特别是如果您为 venvs 提供有意义的短名称。
我的主目录中有一个 python virtualenv 文件夹,其中有很多 python 虚拟环境,我想制作一个脚本 运行 这个命令:
$ source ~/Envs/env_that_i_specify_with_args/bin/activate.
使用 if else 会起作用,但我想要在 ~/Envs/
目录中查找的内容,这样当我添加新环境时,我不必手动编辑脚本,但我可以只使用参数来在另一个目录中执行该命令。(类似于 $ activateEnv -1
,到 运行 我的 ~/Envs/ directory, $ activateEnv -2
中第一个文件夹中的命令到第二个文件夹中的 运行,等等)
- 关于如何做到这一点有什么想法吗?
- 请以相当简单的方式解释一下,因为我对 Linux 还很陌生。
您不能制作一个 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 谁是第一个?按字母顺序排在第一位?第一个按创建时间排序?
我认为使用目录名称(venvone
、venvtwo
、venvthree
)可能会更直观,特别是如果您为 venvs 提供有意义的短名称。