执行bashscript时如何进入Python virtualenv?

Sha*_*ang 6 python bash virtualenv

如果定义了要在bash脚本中使用的python版本,那将是

export PYTHON = "/path/python/python-3.5.1/bin/python"
Run Code Online (Sandbox Code Playgroud)

但对于Python virtualenv,则可以在命令行中执行以下命令

cd /path/pathto/virtualenv
source activate
cd another_directory
Run Code Online (Sandbox Code Playgroud)

如何在bash脚本中“输入” Python virtualenv?这里的标准方法是什么?

das*_*s-g 8

我们必须在这里区分两种情况:

  1. 您想在bash脚本中使用/调用python(或基于python的工具),但是python或这些工具应从virtualenv中获取并在其中运行
  2. 您想要一个脚本,该脚本除其他事项外,可以让您从其调用的外壳进入virtualenv,以便您可以在virtualenv内部以交互方式调用python(或基于python的工具)

情况1:在脚本中使用virtualenv

如何在bash脚本中“输入” Python virtualenv?

就像在交互式bash命令行上一样:

source /path/to/the/virtual_env/bin/activate
Run Code Online (Sandbox Code Playgroud)

这里的标准方法是什么?

标准的做法是不是进入一个bash脚本中的virtualenv。相反,请按其完整路径调用要使用的python和/或基于python的命令。为了使此操作更容易且减少重复,您可以使用别名和变量。

情况2:通过调用脚本在交互式bash会话中激活virtualenv

已经有这样的脚本。它被称为activate,它位于binvirtualenv 的目录中。您必须这样做source,而不是像普通命令一样调用它。只有这样,它才能在同一个会话中运行,而不是在子外壳程序中运行,因此只有这样,它才能对会话进行修改,而不会因子外壳程序在脚本末尾终止而丢失。

所以做:

source /path/to/the/virtual_env/bin/activate
Run Code Online (Sandbox Code Playgroud)

在您的交互式Shell会话中。

但是,如果您想做的比activate脚本还要多呢?你可以放

source /path/to/the/virtual_env/bin/activate
Run Code Online (Sandbox Code Playgroud)

到一个shell脚本。但是,由于上述原因,正常调用脚本时不会产生太大影响。相反,source您的脚本可以从交互式会话中使用它。

从而:

内容 my_activate.sh

#!/bin/bash

# Do something
# ...

# then
source /path/to/the/virtual_env/bin/activate

# Do more stuff
# ...
Run Code Online (Sandbox Code Playgroud)

在您的互动环节

source my_activate.sh
Run Code Online (Sandbox Code Playgroud)