virtualenv не учитывается (нет имени модуля dotenv) в скрипте - PullRequest
0 голосов
/ 15 мая 2019

У меня есть сценарий, который должен запускать 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
>>>

Любой указатель будет принят с благодарностью.

1 Ответ

0 голосов
/ 15 мая 2019

нашел решение: установить gunicorn как часть виртуальной среды.Как правило, обновите requirements.txt, добавив следующую строку:

gunicorn

Только при использовании 'gunicorn', установленного с пакетом debian, это делалось вне контекста virtualenv.

...