Я создал интерфейс flask для довольно подробного приложения, и после большого количества кода он отлично работает локально. Итак, теперь я хочу сделать его видимым для публики, поэтому читал, что ему нужен интерфейс Apache или nginx. Я вычислил нужный мне размер инстанса, включил его на AWS и запустил эти два учебники, которые доказывают, что базовый вариант работает. После завершения настройки Apache страница приветствия Apache отображается, когда я перехожу к IP-адресу экземпляра AWS. Затем, когда я временно заменяю код «Hello World» для своего фляжного приложения и обновляю браузер с помощью IP-адреса, отображается приветственный мир. Кроме того, если я заменю код flasskapp.py из здесь он отлично передает через apache IP-адрес, введенный в браузере, список модулей, найденных pip, включая Numpy и Pandas, которые в противном случае он жалуется на то, что не нашел! Однако этот скрипт можно легко убить, добавив import numpy
вверху, но он выдает следующие сообщения об ошибках:
ImportError: cannot import name 'multiarray'
а также
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf`
(removes all files not under version control).
Otherwise reinstall numpy.
оба в журнале апача.
Проблема возникает, когда я возвращаю свое приложение вместо приветствия, мир. Он просто отказывается импортировать pandas, вот последний раздел журнала Apache:
Mon Jul 03 19:42:14.691081 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] Traceback (most recent call last):
[Mon Jul 03 19:42:14.691126 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] File "/var/www/html/flaskapp/flaskapp.wsgi", line 30, in <module>
[Mon Jul 03 19:42:14.691130 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] from similar_items_frontend import app as application
[Mon Jul 03 19:42:14.691137 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] File "/var/www/html/flaskapp/similar_items_frontend.py", line 4, in <module>
[Mon Jul 03 19:42:14.691140 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] from item_similar_to_doc import similar_to_doc
[Mon Jul 03 19:42:14.691145 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] File "/home/ubuntu/find-similar/frontend/../item_similar_to_doc.py", line 1, in <module>
[Mon Jul 03 19:42:14.691148 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] from PullVectors import p
[Mon Jul 03 19:42:14.691153 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] File "/home/ubuntu/find-similar/frontend/../RunSimilarity.py", line 5, in <module>
[Mon Jul 03 19:42:14.691156 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] import pandas as pd
[Mon Jul 03 19:42:14.691161 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] File "/home/ubuntu/.pyenv/versions/miniconda3-latest/envs/find_similarProject/lib/python3.6/site-packages/pandas/__init__.py", line 19, in <module>
[Mon Jul 03 19:42:14.691164 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] "Missing required dependencies {0}".format(missing_dependencies))
[Mon Jul 03 19:42:14.691180 2017] [wsgi:error] [pid 12300:tid 140131159766784] [client 93.21.05.132:52560] ImportError: Missing required dependencies ['numpy']
Я чувствую, что перепробовал все, это было много мучительных часов, время выдергивания волос..
Вот 000-default.conf
:
WSGIPythonPath /home/ubuntu/.pyenv/versions/miniconda3-latest/envs/vtenv4YTproject/lib/python3.6/site-packages/
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
WSGIDaemonProcess flaskapp threads=5
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
<Directory flaskapp>
WSGIScriptReloading On
WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}
Order allow,deny
Allow from all
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Я должен упомянуть, что мое фляжное приложение отлично работает (вплоть до того, что фляга обслуживает страницу) в своем virtualenv, когда я нахожусь на ssh в экземпляре AWS, конечно, было немного возиться, чтобы заставить это работать, но он находит все свои зависимости, не падающие при импорте pandas.
Чтобы попытаться исправить это, я посмотрел здесь , здесь, добавлен код из здесь просмотрела обширную документацию здесь, мой файл flaskapp.wsgi выглядит так:
import sys
import logging
import os.path
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
import config
import site
prev_sys_path = list(sys.path)
site.addsitedir('/home/ubuntu/.pyenv/versions/miniconda3-latest/envs/find_similarProject/lib/python3.6/site-packages')
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/var/www/html/flaskapp")
from similar_vids_frontend import app as application
application.secret_key = config.WSGI_KEY
Я просто не могу понять, почему импорт pandas/numpy не работает с apache, но работает нормально, когда просто запускается в virtualenv. Интересно, есть ли что-то связанное с разрешениями и группами, согласно документам:
Имейте в виду, что пользователь, от имени которого Apache запускает ваш код, должен иметь доступ к виртуальной среде Python. В некоторых дистрибутивах Linux домашний каталог учетной записи пользователя недоступен для других пользователей. Вместо того, чтобы изменять разрешения для вашего домашнего каталога, лучше рассмотреть возможность размещения кода вашего приложения WSGI и любой виртуальной среды Python за пределами вашего домашнего каталога.
Но является ли Ubuntu одним из тех дистрибутивов, и что тогда, устанавливать виртуальные среды и проецировать в папку /
?
Благодарен за любые советы или решения.
sudo apt install virtualenv
, хотя все работает, если apache не пытается его запустить - person cardamom   schedule 04.07.2017WSGIDaemonProcess
, поэтому я думаю, что вы действительно используете режим демона, о котором говорит ответ. Вы пробовали исправить ответ, который предлагает ответ? - person syntonym   schedule 04.07.2017WSGIDaemonProcess flaskapp threads=5 python-path=/home/ubuntu/.pyenv/versions/miniconda3-latest/envs/find_similarProject/bin
, но проблема осталасьImportError: Missing required dependencies ['numpy']
- person cardamom   schedule 04.07.2017python-path
должен указывать на ваши пакеты сайтов, поэтому, вероятно,WSGIDaemonProcess flaskapp threads=5 python-path=/home/ubuntu/.pyenv/versions/miniconda3-latest/envs/find_similarProject/lib/python3.6/site-packages
. - person syntonym   schedule 04.07.2017apache
? Если вы запускаете свое приложение от имени этого пользователя с терминала, оно все еще работает? - person syntonym   schedule 04.07.2017WSGIProcessGroup
, он должен называть группу процессов демона, а не%{GLOBAL}
. Вы также настраиваете всю виртуальную среду с помощью mod_wsgi нерекомендуемым образом. Прочитайте modwsgi.readthedocs.io/en/develop/user- руководства/ - person Graham Dumpleton   schedule 04.07.2017pip
метод его установки, как описано в pypi.python.org/pypi /mod_wsgi - person Graham Dumpleton   schedule 04.07.2017mod_wsgi/4.3.0 Python/3.5.2 configured
, когда я скомпилировал его для Python 3.6. На данный момент я избавился от virtualenv и просто использую miniconda3-latest в pyenv, но это ничего не помогло. Я прочитаю о группе процессов демона и перезапущу ее. - person cardamom   schedule 04.07.2017%{GLOBAL}
, но я вижу, что еще в феврале вы сказали кому-то с похожей проблемой сделать именно это, что-то еще должно быть по-другому.. - person cardamom   schedule 04.07.2017WSGIProcessGroup
, должно соответствовать имени директивыWSGIDaemonProcess
. Тот другой пост был оWSGIApplicationGroup
, который отличается. - person Graham Dumpleton   schedule 04.07.2017anaconda3-4.4.0
на случай, если это произойдет, но тогда мой собственный код больше не будет работать локально, вылетит с ужасным стеком сообщений об ошибках. - person cardamom   schedule 04.07.2017WSGIProcessGroup %{GLOBAL}
. Спасибо за размещение вопроса. Примечание. Я поместил конфигурацию не в раздел «Каталог», а чуть ниже WSGIScriptAlias. - person Vikram3891   schedule 27.11.2019