使用shell脚本激活VirtualEnv似乎不起作用

时间:2011-09-10 02:03:47

标签: shell terminal virtualenv

我尝试通过类似下面的shell脚本激活VirtualEnv,但它似乎不起作用,

#!/bin/sh
source ~/.virtualenvs/pinax-env/bin/activate

我收到以下错误

$ sh virtualenv_activate.sh 
virtualenv_activate.sh: 2: source: not found

但如果我在终端上输入相同的命令,它似乎可以正常工作

$ source ~/.virtualenvs/pinax-env/bin/activate
(pinax-env)gautam@Aspirebuntu:$

所以我将shell脚本更改为

#!/bin/bash
source ~/.virtualenvs/pinax-env/bin/activate

建议和使用

$ bash virtualenv_activate.sh 
gautam@Aspirebuntu:$

运行脚本。

这不会引发错误,但也不会激活虚拟环境

那么有关如何解决这个问题的任何建议吗?

PS:我使用的是Ubuntu 11.04

5 个答案:

答案 0 :(得分:59)

TLDR

必须使用source而不是仅使用脚本

运行.sh脚本
source your-script.sh

而不是     your-script.sh

详细

sh与bash不同(虽然有些系统只是将sh链接到bash,所以运行sh实际上运行bash)。您可以将sh视为bash的淡化版本。 bash所具有的一件事就是“源”命令。这就是为什么你得到了这个错误...源在你的bash shell中正常运行。但是当您使用sh启动脚本时,您将在子进程中的shell中运行该脚本。由于该脚本在sh中运行,因此找不到“source”。

解决方案是在bash中运行脚本。将第一行更改为...

#!/bin/bash

然后用...运行

./virtualenv_activate.sh

...或...

/bin/bash virtualenv_activate.sh

修改

如果要激活virtualenv来更改从中调用脚本的shell,则需要使用“source”或“dot operator”。这可确保脚本在当前shell中运行(因此更改当前环境)...

source virtualenv_activate.sh

...或...

. virtualenv_activate.sh

作为旁注,这就是为什么virtualenv总是说你需要使用“source”来运行它的激活脚本。

答案 1 :(得分:7)

source是bash中的内置shell命令,在sh中不可用。如果我没记错,那么虚拟env会做很多路径和环境变量操作。即使以bash virtualenv_blah.sh运行它也不会工作,因为这只会在子shell中创建环境。

尝试. virtualenv_activate.shsource virtualenv_activate.sh这基本上会让脚本在当前环境中运行,并且virtualenv的activate修改的所有环境变量都将可用。

HTH。

修改:这是一个可能有用的链接 - http://ss64.com/bash/period.html

答案 2 :(得分:5)

在Mac OS X上,您的提案似乎无效。

我这样做了。我对解决方案不是很满意,但无论如何都要分享它并希望,也许有人会建议更好的解决方案:

activate.sh我有

echo 'source /Users/andi/.virtualenvs/data_science/bin/activate'

我通过以下方式提供执行权限:chmod +x activate.sh

我这样执行:

`./activate.sh`

请注意,ASCII码96 =`(严重重音)

形式存在副词

答案 3 :(得分:0)

在我的情况下,Ubuntu 16.04,上述方法效果不佳或需要大量工作。

我刚刚链接了“激活”脚本文件,并将其复制到主文件夹(或$ PATH可访问文件夹),并将其重命名为“ actai”之类的简单文件。

然后在终端中,只需调用“ source actai”即可。奏效了!

答案 4 :(得分:0)

对我来说,最好的工作方式如下。

在代码下方创建start-my-py-software.sh和有害生物

#!/bin/bash
source "/home/snippetbucket.com/source/AIML-Server-CloudPlatform/bin/activate"
python --version
python /home/snippetbucket.com/source/AIML-Server-CloudPlatform/main.py

授予文件运行权限,如下所示。

chmod +x start-my-py-software.sh

现在像下面那样运行

.start-my-py-software.sh

就这样,启动我基于python的服务器或任何其他代码。

ubuntu#18.0