如何在执行bashscript时输入Python virtualenv?

2024-04-20 12:57:26 发布

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

如果定义了在bash脚本中使用哪个版本的python,那么

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

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

cd /path/pathto/virtualenv
source activate
cd another_directory

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


Tags: path命令行命令版本脚本bashsourcebin
3条回答

下面是几个步骤,你可以做的一件事是

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

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

vim ~/.bashrc 

走到尽头

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

我们必须区分两种情况:

  1. 您想在bash脚本中使用/调用python(或基于python的工具),但是python或那些工具应该从virtualenv中获取并运行
  2. 您需要一个脚本,其中包括让您调用它的shell进入virtualenv,以便您可以在virtualenv中交互调用python(或基于python的工具)

案例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和/或基于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

变成一个外壳脚本。但是,由于上述原因,正常调用脚本时不会有太大影响。相反,source您的脚本可以在交互会话中使用它。

因此:

my_activate.sh的含量

#!/bin/bash

# Do something
# ...

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

# Do more stuff
# ...

在你的互动会话中

source my_activate.sh

我建议使用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

然后,使用workon命令“输入”环境。

workon myproject.2.6

相关问题 更多 >