我尝试通过类似下面的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
答案 0 :(得分:59)
必须使用source
而不是仅使用脚本
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.sh
或source 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的服务器或任何其他代码。