在bash脚本中激活python虚拟环境失败,并显示“ sudo:source:command not found”

时间:2019-07-18 07:52:38

标签: python bash sh virtualenv

我正在尝试通过准备所有必要的文件/目录并从Github克隆源代码,然后创建虚拟环境,安装程序来使用Bash在Ubuntu 18.04上自动化Python-Flask应用程序的部署。必备模块等。

现在,因为我必须使用sudo执行我的Bash脚本,这意味着整个脚本将以root的身份执行,除非我另外指定使用sudo -u myuser以及涉及到激活我的虚拟环境,我得到以下输出:sudo: source: command not found和随后的pip安装都安装在虚拟环境之外。我的代码摘录如下:

#!/bin/bash
...
sudo -u "$user" python3 -m venv .env
sudo -u $SUDO_USER source /srv/www/www.mydomain.com/.env/bin/activate
sudo -u "$user" pip install wheel
sudo -u "$user" pip install uwsgi
sudo -u "$user" pip install -r requirements.txt
...

现在,为了我的生命,我想不通如何在虚拟环境中激活虚拟环境。

我已经在网络上进行了搜索,发现的大多数问题/答案都与如何在Bash脚本中激活虚拟环境有关,而不是与如何以Bash脚本中的独立用户身份激活虚拟环境有关。 sudo

1 个答案:

答案 0 :(得分:2)

这是因为source不是可执行文件,而是内置的bash命令。 sudo不能使用,因为后者接受程序名称(即可执行文件)作为参数。

P.S。目前尚不清楚为什么必须以root用户身份执行整个脚本。如果您只需要以root用户身份执行许多命令(例如,用于启动/停止服务)并以常规用户身份运行其余大多数命令,则可以仅将sudo 用于这些命令。例如。以下脚本

#!/bin/bash

# The `whoami` command outputs the current username. Unlike `source`, this is
# a full-fledged executable file, not a built-in command
whoami
sudo whoami
sudo -u postgres whoami

在我的机器输出上

trolley813
root
postgres

P.P.S。您可能不需要将环境激活为root