Это не работает для меня, и я использую

ающая обстановка: Ubuntu 16.04 (с системой Python в 2.7.12) работает в Vagrant / Virtualbox на хосте Windows 10

Настройка Python: Системный python проверяется с помощью python -V без активации virtualenv. Python 3.5 также установлен, и я сделалpipenv --three создать virtualenv для этого проекта. Делаем python -V в активированном virtualenv (pipenv shell активировать) показывает Python 3.5.2.

Дополнительный фон: Я разрабатываю приложение Wagtail 2. Wagtail 2 требует Django 2, который, конечно, требует Python 3. У меня есть другие приложения Django на этой машине, которые были разработаны в Django 1.11 / Python 2.7 и обслуживаются Apache. Мы переходим к Django 2 / Python 3 для дальнейшего развития и переходим к nginx / uWSGI для обслуживания приложений.

Я прошел много уроков / итераций. Все сопоставления портов Vagrant настроены нормально, nginx обслуживает мультимедийные / статические файлы и передает запросы к приложению Django на сокете unix, но это приводит к ошибке 502 Gateway not found, поскольку uWSGI не будет работать правильно. Поэтому сейчас я просто запускаю следующую команду из командной строки, чтобы попытаться запустить uWSGI:uwsgi --ini /etc/uwsgi/sites/my_site.com.ini, Этот файл содержит:

[uwsgi]

uid = www-data
gid = www-data

plugin = python35

# Django-related settings
# the base directory (full path)
chdir=/var/sites/my_site
# Django's wsgi file
wsgi-file = my_site.wsgi
# the virtualenv (full path)
virtualenv=/root/.local/share/virtualenvs/my_site-gmmiTMID

# process-related settings
# master
master = True
# maximum number of worker processes
processes = 10

# the socket (use the full path to be safe)
socket = /tmp/my_site.sock

# clear environment on exit
vacuum = True

Я попытался установить uWSGI следующими способами:

общесистемный сpip install uwsgi также как иpip3 install uwsgiс помощьюapt-get install uwsgi uwsgi-plugin-python3

Я гарантировал, что одновременно выполняется только одна установка, удалив все предыдущие установки uwsgi. Последний метод установки помещает uwsgi-core в usr / bin, а также в ярлыки usr / bin для uwsgi, uwsgi_python3 и uwsgi_python35.

В файле .ini я тоже пробовалplugin = python3, Я также пытался из командной строки:

uwsgi_python3 --ini /etc/uwsgi/sites/my_site.com.iniuwsgi_python35 --ini /etc/uwsgi/sites/my_site.com.ini

Я пытался выполнитьuwsgi ... .ini Команды как из активированной виртуальной среды, так и с деактивированной virtualenv. Каждая из трех командных строкuwsgi ... .ini казни (uwsgi ..., uwsgi_python3 ... а такжеuwsgi_python35 ...) НЕОБХОДИМО, чтобы файл .ini был выполнен, но каждый раз я получаю следующую ошибку (последние две строки следующих операторов):

[uwsgi] implicit plugin requested python35
[uWSGI] getting INI configuration from /etc/uwsgi/sites/my_site.com.ini
*** Starting uWSGI 2.0.12-debian (64bit) on [Wed Mar  7 03:54:44 2018] ***
compiled with version: 5.4.0 20160609 on 31 August 2017 21:02:04
os: Linux-4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018
nodename: vagrant-ubuntu-trusty-64
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /vagrant/my_site
detected binary path: /usr/bin/uwsgi-core
setgid() to 33
setuid() to 33
chdir() to /var/sites/my_site
your processes number limit is 7743
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/my_site.sock fd 3
Python version: 3.5.2 (default, Nov 23 2017, 16:37:01)  [GCC 5.4.0 20160609]
Set PythonHome to /root/.local/share/virtualenvs/my_site-gmmiTMID
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Если я захожу в командную строку Python в активированном virtualenv и делаюimport encodings, он импортирует нормально (без сообщений - просто возвращается в командную строку). Поиск этой конкретной ошибки оказался бесполезным. Любая идея, почему появляется ImportError: Нет модуля с именем 'encodings'?

ОБНОВЛЕНИЕ - ПРОБЛЕМА ВСЕГО ПРОИСХОДИТ

Я использую pipenv, и он хранит отдельные virtualenvs в/home/username/.local/share/virtualenvs папка. Хотя я смог запустить uWSGI из командной строки, выполнив файл конфигурации uWSGI от имени бродячего пользователя (см. Комментарий ниже), я все еще не смог запустить службу с/home/vagrant/.local/share/virtualenvs/my_venv в конфигурационном файле uWSGI. Я попытался добавить пользователя vagrant в группу www-data и добавить пользователя www-data в группу vagrant. Я также поместил разрешение на чтение и выполнение для всего мира на весь путь (включая отдельный venv), но служба uWSGI все равно не запустится.

HACKISH WORKAROUND

Наконец-то я запустил сервис uWSGI, скопировав venv в/opt/virtualenvs/my_venv, Затем я смог начать службу сsudo service uwsgi start, Право собственности на весь этот путь - root: root.

ЕЩЕ ИЩЕТЕ РЕШЕНИЕ ...

Это решение не является оптимальным, так как сейчас я выполняю файл virtualenv, который необходимо будет обновить при обновлении virtualenv по умолчанию, поскольку это расположение не по умолчанию для pipenv, поэтому я все еще ищу ответы. Возможно, это ошибка разрешений Ubuntu, но я просто не могу найти проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос