【发布时间】:2019-07-18 07:52:38
【问题描述】:
我正在尝试使用 Bash 在 Ubuntu 18.04 上自动部署我的 Python-Flask 应用程序,方法是准备所有必要的文件/目录并从 Github 克隆源代码,然后创建虚拟环境,安装必备模块等。
现在因为我必须使用 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.
【问题讨论】:
-
你知道
source是做什么的吗? -
无论如何,即使
source可以工作,当sudo完成时,virtualenv 也会停用。整个脚本必须在一个sudo会话下运行。
标签: python bash sh virtualenv