【问题标题】:Bash script to activate (source) python virtualenv using arguments使用参数激活(源)python virtualenv 的 Bash 脚本
【发布时间】:2019-11-14 23:21:32
【问题描述】:

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

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

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

  • 关于如何做到这一点的任何想法?
  • 由于我是 Linux 的新手,请以相当简单的方式解释它。

【问题讨论】:

标签: python bash virtualenv


【解决方案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)可能会更直观,尤其是如果您为您的 venvs 提供有意义的短名称。

【讨论】:

  • 感谢您的快速响应,这完美无缺。
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多