У меня есть сценарий, который должен запускать 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
Из его вывода кажется довольно ясным, что виртуальный env активируется и требование установлено правильно (так как модульотображается при отображении 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
>>>
Любой указатель будет принят с благодарностью.