Ответ 1
Сначала посмотрите ответ @JRajan.
Если вы уверены, что хотите просто устранить ошибку и фактически не решить основную проблему, вы должны добавить --no-site
к вашей команде или no-site=true
к вашему файлу uwsgi.ini.
(Другие сообщения на SO аналогичны, но ни одна из них не имеет конкретной комбинации uwsgi + Flask + virtualenv) (этот ближайший)
Я установил uwsgi через apt-get. Я также попробовал pip install wsgi. Оба дали мне ту же проблему.
Команда тестирования:
sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H myvirtualenv
Результат:
Python version: 2.7.4 (default, Apr 19, 2013, 18:35:44) [GCC 4.7.3]
Set PythonHome to myvirtualenv
ImportError: No module named site
В противном случае я могу запустить приложение в виртуальном env.
Сначала посмотрите ответ @JRajan.
Если вы уверены, что хотите просто устранить ошибку и фактически не решить основную проблему, вы должны добавить --no-site
к вашей команде или no-site=true
к вашему файлу uwsgi.ini.
Неправильный путь к вашей виртуальной среде. Это средство для этой ошибки.
Я использую virtualenvwrapper, и мои виртуальные среды установлены в ~/.virtualenvs. Поэтому в моем случае вызов uwsgi будет выглядеть примерно так:
sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H ~/.virtualenvs/myapp
Надеюсь, это поможет в следующий раз, когда кто-то найдет этот.
Спасибо Коди за указание на это в комментариях.
В моем случае проблема была в версии python, которую пыталась использовать uWSGI.
Мой проект был написан на python 3.4, но я не указывал это в конфигурации uWSGI. Поэтому uWSGI попытался использовать python 2 и попытался импортировать модули из папки lib/python2.7 внутри virtualenv.
Поэтому я получил ошибку "Нет модуля с именем сайта", потому что все модули, включая модуль сайта, внутри lib/python3.4, а не lib/python2.7.
Чтобы решить эту проблему, мне пришлось сделать две вещи:
Установите плагин python3 для uWSGI, используя: apt-get install uwsgi-plugin-python3
Используйте его в конфигурационном файле.ini, используя: plugins = python34
Надеюсь, это поможет кому-то с той же проблемой в будущем.
В соответствии с запросом здесь следует мой.ini файл:
[uwsgi]
base = /your/app/path
pythonpath = %(base)
module = your_module_name
callable = app #Here you put the name of the variable which holds your app inside your module
home = /your/virtualenv/path
plugins = python34
master = true
processes = 2
uid = www-data
gid = www-data
socket = /path/to/socket
chmod-socket = 660
die-on-term = true
logto = /var/log/uwsgi/%n.log
Раньше у меня была аналогичная проблема. Моя проблема в том, что у меня есть python2.x и python3.x в моей системе ubuntu, и я хочу, чтобы мой проект запускался в виртуальном env, в котором установлена среда python3. Как я решил эту проблему:
apt-get install python3-pip
pip3 установить uWSGI
Все это.
Если ваша виртуальная среда работает на Python3, тогда вы должны установить uwsgi, используя pip3, а не pip иначе, несоответствие версии создаст эту проблему импорта
pip uninstall uwsgi
pip3 install uwsgi
ЭТО МОЖЕТ БЫТЬ ПЛОХО ДЛЯ БЕЗОПАСНОСТИ ДЛЯ НЕСКОЛЬКИХ ПРИЧИН. ЭТО РАБОТАЕТ ДЛЯ ТЕСТИРОВАНИЯ. НО ОБЗОР БЕЗОПАСНОСТИ ПЕРЕД ИСПОЛЬЗОВАНИЕМ ЭТОГО ТОЧНОГО РЕШЕНИЯ В ПРОИЗВОДСТВЕ
Другая причина, по которой может возникнуть эта ошибка, связана с разрешениями. Если вы используете файл.ini, как описано в официальном руководстве для uWSGI для django, возможно, вы создали файл ini с пользователем и группой, что делает файл недоступным для пользователя, выполняющего этот процесс.
Проверьте владельца и разрешения для файла и путь к каталогу. Используйте chown и chmod для установки необходимых разрешений.
sudo chown -R www-data:www-data/srv
sudo chmod 0775 -R/srv
В моем случае я использовал бродячую шкатулку для тестирования, а пользователь по умолчанию "бродячий", а nginx использует www-данные для пользователя и группы. Я установил владельца всех файлов в проекте пользователю и группе www-data и добавил бродячего пользователя в группу www-data.
sudo gpasswd -a vagrant www-data
Я не уверен, что это хорошая практика безопасности, поэтому я буду работать с моим системным администратором, когда придет время поставить его в производство. Но для моей тестовой среды это работает. В любом случае, разрешения будут рассмотрены по многим из этих вопросов.
Я столкнулся с тем же, и моя проблема была связана с версией python, в которой запущен uwsgi. uwsgi работал на python2, но мой путь к python virtualenv был установлен на python3. Это создало конфликт, и он не смог найти установленный пакет сайта.
Дважды проверьте версию python, где запущен uwsgi, так что он совпадает с настройкой на вашем виртуальном сервере.
У меня была эта проблема, когда мой homebrew обновил мою версию Python до Python 3.7, и она перестала работать. Для меня работал brew info python
, который покажет вам все ваши доступные версии Python. Затем я откатился на Python 3.6.5, используя brew switch python 3.6.5
.
После этого я просто переустановил свой uWSGI, используя:
pip3 uninstall uwsgi
pip3 install uwsgi
И это решило это. Если вы не уверены, какую версию Python вы использовали, brew info python
покажет вам даты установки. Кроме того, вы можете проверить с pip3 list
ли ваш uWSGI для текущей версии.
Надеюсь это поможет!