【发布时间】:2019-05-15 09:57:31
【问题描述】:
我有一个应该启动 gunicorn 的脚本:
set -x
cd $VIRTUALENV
. bin/activate
pip freeze
cd $DJANGODIR
### Start Gunicorn
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--bind=127.0.0.1:8000
从它的输出来看,似乎很清楚虚拟环境被激活并且要求安装正确(因为显示pip freeze时显示模块):
+ cd /home/ubuntu/envs/app
+ . bin/activate
++ deactivate nondestructive
++ unset -f pydoc
++ '[' -z '' ']'
++ '[' -z '' ']'
++ '[' -n /bin/bash ']'
++ hash -r
++ '[' -z '' ']'
++ unset VIRTUAL_ENV
++ '[' '!' nondestructive = nondestructive ']'
++ VIRTUAL_ENV=/home/ubuntu/envs/app
++ export VIRTUAL_ENV
++ _OLD_VIRTUAL_PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/usr/games:/usr/local/games:/snap/bin
++ PATH=/home/ubuntu/envs/app/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/s
bin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
++ export PATH
++ '[' -z '' ']'
++ '[' -z '' ']'
++ _OLD_VIRTUAL_PS1=
++ '[' x '!=' x ']'
+++ basename /home/ubuntu/envs/app
++ PS1='(app) '
++ export PS1
++ alias pydoc
++ '[' -n /bin/bash ']'
++ hash -r
+ pip freeze
Django==2.2.1
pkg-resources==0.0.0
postgres==2.2.2
psycopg2-binary==2.8.2
python-dotenv==0.10.2
python-memcached==1.59
pytz==2019.1
six==1.12.0
sqlparse==0.3.0
+ cd /home/ubuntu/app/app
+ exec gunicorn app.wsgi:application --name app --workers 3 --user=ubuntu --group=ubuntu --log-le
vel=debug --bind=127.0.0.1:8000
...
现在,此脚本失败并出现以下错误:
File "/home/ubuntu/project/app/app/app.py", line 11, in <module>
from dotenv import load_dotenv, find_dotenv
ImportError: No module named dotenv
这让我怀疑 virtualenv 没有保持激活状态......
如果我手动执行相同的步骤,我不会收到错误:
cd /home/ubuntu/envs/app
. bin/activate
python
>>> from dotenv import load_dotenv, find_dotenv
>>>
任何指针将不胜感激。
【问题讨论】:
标签: python bash virtualenv gunicorn