执行bash脚本时如何进入Python virtualenv?

How does one enter a Python virtualenv when executing a bashscript?

如果定义在 bash 脚本中使用 python 的哪个版本,它将是

export PYTHON = "/path/python/python-3.5.1/bin/python"

但是对于Python virtualenv,在命令行中执行这些命令

cd /path/pathto/virtualenv
source activate
cd another_directory

"enter" 如何在 bash 脚本中创建 Python virtualenv?这里的标准方法是什么?

这里有几个步骤,您可以做的一件事是

export PYTHON = "/path/pathto/virtualenv/python"

在bashrc中使用这个路径来使用。或者你可以这样做:-

vim ~/.bashrc 

转到结束并设置

alias python=/path/pathto/virtualenv/python
source ~/.bashrc 

我推荐使用 virtualenvwrapper。它提供了一些用于管理虚拟环境的有用工具。

pip install --user virtualenvwrapper

创建虚拟环境时,您指定应在环境中使用哪个版本的python。

mkvirtualenv  -p /usr/local/bin/python2.6  myproject.2.6
mkvirtualenv  -p /usr/local/bin/python3.3  myproject.3.3

然后,"enter"使用 workon 命令的环境。

workon myproject.2.6

这里必须区分两种情况:

  1. 您想在 bash 脚本中 use/call python(或基于 python 的工具),但是 python 或那些工具应该被使用来自和 运行 在 vi​​rtualenv
  2. 你想要一个脚本,除其他外,让你调用它的shell进入virtualenv,这样你就可以交互调用python(或python-基于工具)在 virtualenv

案例 1:在脚本中使用 virtualenv

How does one "enter" a Python virtualenv in a bash script?

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

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

What is the standard approach here?

标准方法是不是在bash脚本中输入virtualenv。相反,调用 python and/or 您希望通过其完整路径使用的基于 python 的命令。为了使这更容易并减少重复,您可以使用别名和变量。

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

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

那就这样吧:

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

在您的互动 shell 会话中。

但是,如果您想做的比 activate 脚本做的更多怎么办?你可以把

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

到 shell 脚本中。 但是,由于上面提到的原因,当你正常调用你的脚本时,它不会有太大的影响。相反,source 您的脚本可以在交互式会话中使用它。

因此:

my_activate.sh

的内容
#!/bin/bash

# Do something
# ...

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

# Do more stuff
# ...

并在您的互动会话中

source my_activate.sh