Невозможно импортировать flask_cors с apache2, mod_wsgi под Python3.5 на Raspberry pi - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь настроить веб-сайт на основе Flask на Raspberry Pi 3B +, с Apache2 (2.4.25) и mod_wsgi, но не могу импортировать модуль flask_cors в Python3.5 ...

Я установил mod_wsgi с командой ssudo apt-get install libapache2-mod-wsgi

Поскольку я планирую использовать Raspberry только для размещения своего веб-сайта, я попытался установить пакеты, необходимые для всей системы Flask, с версией 3.5 Python, сследующая команда: pip3 install -r requirements.txt где Requiretion.txt является следующим:

click==6.7
Flask==0.12.3
Flask-Cors==3.0.3
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
six==1.11.0
Werkzeug==0.12.2
Requests==2.20.0

Я думаю, что я понял, что на Raspi лучше всего импортировать модули с командой pip3 install -U <module>, потому что пакетыне установлен в месте по умолчанию для python, что подтверждается в моем случае следующей командой python -m site, которая выдает следующую информацию:

sys.path = [
    '/home/pi/.local/lib/python3.5/site-packages',
    '/usr/lib/python35.zip',
    '/usr/lib/python3.5',
    '/usr/lib/python3.5/plat-arm-linux-gnueabihf',
    '/usr/lib/python3.5/lib-dynload',
    '/usr/local/lib/python3.5/dist-packages',
    '/usr/local/lib/python3.5/dist-packages/virtualenv-16.1.0-py3.5.egg',
    '/usr/lib/python3/dist-packages',
]
USER_BASE: '/home/pi/.local' (exists)
USER_SITE: '/home/pi/.local/lib/python3.5/site-packages' (exists)
ENABLE_USER_SITE: True

Моя колба и зависимости действительно установлены в папке /home/pi/.local/lib/python3.5/site-packages,Но, похоже, это не проблема, потому что при проверке импорта в оболочке python все выглядит нормально для всей системы:

pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from flask_cors import CORS
>>> 

Зная это, я попытался поместить следующие файлы для настройки моего сервера apache:

flaskregul.conf в папке / etc / apache2 / sites-enabled:

<VirtualHost *:80>
    WSGIScriptAlias / /var/www/flaskregul/flaskregul.wsgi
    Alias /static/ /var/www/flaskregul/dist/static/
    <Directory /var/www/flaskregul/dist/static>
        WSGIProcessGroup flaskregul
            WSGIApplicationGroup %{GLOBAL}
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog /var/log/apache2/flask.monnomdedomaine.com.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

flaskregul.wsgi в / var / www / flaskregul:

import sys
sys.path.insert(0,"/var/www/flaskregul") # path to my __init__.py file
sys.path.insert(0,"/home/pi/.local/lib/python3.5/site-packages") # path to the site-packages folder where the modules are installed by pip3
from __init__ import app as application

__ init__.py в / var / www / flaskregul:

from flask import Flask
from flask_cors import CORS

Я не могу специально импортировать модуль flask_cors, потому что запуск файла __init__.py приводит к следующим ошибкам в файле /var/log/apache2/flask.monnomdedomaine.com.log:

[Sat Nov 10 00:37:22.220394 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550] mod_wsgi (pid=6804): Target WSGI script '/var/www/flaskregul/flaskregul.wsgi' cannot be loaded as Python module.
[Sat Nov 10 00:37:22.220972 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550] mod_wsgi (pid=6804): Exception occurred processing WSGI script '/var/www/flaskregul/flaskregul.wsgi'.
[Sat Nov 10 00:37:22.221936 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550] Traceback (most recent call last):
[Sat Nov 10 00:37:22.222365 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550]   File "/var/www/flaskregul/flaskregul.wsgi", line 1, in <module>
[Sat Nov 10 00:37:22.222395 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550]     from __init__ import app as application
[Sat Nov 10 00:37:22.222445 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550]   File "/var/www/flaskregul/__init__.py", line 2, in <module>
[Sat Nov 10 00:37:22.222463 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550]     from flask_cors import CORS
[Sat Nov 10 00:37:22.222557 2018] [wsgi:error] [pid 6804:tid 1955591216] [client 192.168.1.67:33550] ImportError: No module named 'flask_cors'

Принимая во внимание, что импорт Flask выглядит нормально ...

Я попытался отладить это, изменив файл сценария WSGI следующим образом:

import sys
sys.path.insert(0,"/var/www/flaskregul")
sys.path.insert(0,"/home/pi/.local/lib/python3.5/site-packages")

def application(environ, start_response):
    status = '200 OK'

    output = u''
    output += u'sys.version = %s\n' % repr(sys.version)
    output += u'sys.prefix = %s\n' % repr(sys.prefix)
    output += u'sys.path = %s\n' % repr(sys.path)

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output.encode('UTF-8')] 

Это совет, совет на этой веб-странице от mod_wsgi: https://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html. При открытии веб-страницы я получаю такой результат:

sys.version = '3.5.3 (default, Sep 27 2018, 17:25:39) \n[GCC 6.3.0 20170516]'
sys.prefix = '/usr'
sys.path = ['/home/pi/.local/lib/python3.5/site-packages', '/var/www/flaskregul', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-arm-linux-gnueabihf', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/local/lib/python3.5/dist-packages/virtualenv-16.1.0-py3.5.egg', '/usr/lib/python3/dist-packages']

У меня сложилось впечатление, что путь правильный!Мне действительно удается импортировать мои собственные модули, расположенные в каталоге / var / www / flaskregul ...

Я заблудился, я не понимаю, почему конкретно модуль flask_cors недоступен, потому что он действительно находится впуть:

pi@raspberrypi:~/.local/lib/python3.5/site-packages $ l | grep flask
drwxr-xr-x 5 pi pi   4096 nov.   9 23:30 flask
drwxr-xr-x 3 pi pi   4096 nov.  10 00:08 flask_cors
pi@raspberrypi:~/.local/lib/python3.5/site-packages $ l flask_cors 
total 44
-rw-r--r-- 1 pi pi 13771 nov.  10 00:08 core.py
-rw-r--r-- 1 pi pi  4937 nov.  10 00:08 decorator.py
-rw-r--r-- 1 pi pi  7405 nov.  10 00:08 extension.py
-rw-r--r-- 1 pi pi   924 nov.  10 00:08 __init__.py
drwxr-xr-x 2 pi pi  4096 nov.  10 00:08 __pycache__
-rw-r--r-- 1 pi pi    22 nov.  10 00:08 version.py

Любая помощь будет принята с благодарностью!В настоящее время я теряю волосы с беспокойством!

1 Ответ

0 голосов
/ 10 ноября 2018

Боже мой, я решил это в отчаянной попытке, прежде чем сдаться.

Я выполнил следующие команды на оболочке: (pip - это точка python3.5 /! \)

pip uninstall flask
pip uninstall flask_cors
sudo pip install --upgrade pip
hash -d pip
sudo pip install -U flask
sudo pip install -U flask_cors

Сайт запущен и работает! : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...