【问题标题】:How does one enter a Python virtualenv when executing a bashscript?执行 bash 脚本时如何进入 Python virtualenv?
【发布时间】:2017-04-15 03:30:26
【问题描述】:

如果在 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?这里的标准方法是什么?

【问题讨论】:

  • 使用python脚本进入python virtualenv。以#! /usr/bin/env python开始文件
  • @IporSircer 你会如何使用python脚本进入virtualenv?

标签: python bash virtualenv


【解决方案1】:

这里我们要区分两种情况:

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

案例 1:在脚本中使用 virtualenv

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

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

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

这里的标准方法是什么?

标准方法是在 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

到一个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

【讨论】:

  • 不应该source /path/to/the/virtual_env/bin/pythonsource /path/to/the/virtual_env/bin/activate
  • @NathanArthur:确实。相应地进行了编辑。谢谢!
【解决方案2】:

我推荐使用 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

【讨论】:

    【解决方案3】:

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

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

    在bashrc中使用这个路径来使用。或者您可以执行以下操作:-

    vim ~/.bashrc 
    

    转到结尾并设置

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

    【讨论】:

    • "在bashrc中使用这个路径来使用。"我不跟。如何“激活” virtualenv?
    • 不需要激活 virtualenv 只需使用这个路径“/path/pathto/virtualenv/python”,就像我有“/home/rakeshkumar/trading/venv/bin/python”一样。我遵循别名方法并且对我来说工作正常。
    • 因为我的普通python有2.7,在使用virtualenv的别名后,python命令使用3.5
    • 你能解释一下为什么你们既EXPORT python 又通过alias python=path 定义它?也许这是一个 n00b 问题,但您不只需要前者吗?
    • 好的,我没有使用EXPORT 方式,我使用的是alis python=path 方式。我在回答中写了EXPORT,以为你想和EXPORT一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2017-03-08
    • 2012-06-24
    • 2023-04-03
    • 2017-03-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多