Я пытаюсь создать приложение на python, которое можно запустить из Apache XAMPP, поэтому я установил колбу ($ pip install flask
) и следовал следующим инструкциям для установки mod_wsgi http://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html.
Я использую Apache от XAMPP версии 2.4.29 и python 3.6.4 от anaconda. Я создал файл mod_wsgi (версия 4.6.4), скачав с https://github.com/GrahamDumpleton/mod_wsgi/releases и используя следующую команду:
$ ./configure --with-apxs=/Applications/XAMPP/xamppfiles/bin/apxs --with-python=/Users/pauline/anaconda3/bin/python3.6 --disable-framework
, за которыми следуют make
и sudo make install
. Я тоже попробовал с и без --disable-framework
. После установки я проверил otool -L mod_wsgi.so
, что дает мне (выглядит правильно):
SCARLET10siMac4:modules pauline$ otool -L mod_wsgi.so
mod_wsgi.so:
@rpath/libpython3.6m.dylib (compatibility version 3.6.0, current version 3.6.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1452.23.0)
Кроме того, когда проверяются загруженные модули Apache (с помощью этой команды: /Applications/XAMPP/xamppfiles/bin/httpd -M
), он также показывает wsgi_module (shared)
. И вывод sys.prefix
равен / Users / pauline / anaconda3, а sys.version
равен 3.6.4
.
Мое приложение (image_download.py) имеет следующий простой код:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
if __name__ == "__main__":
app.run()
И мой файл wsgi (image_download.wsgi) следующий:
import sys
sys.path.insert(0,"/Users/pauline/Documents/Code/platform_projects/image_download/image_download")
from image_download import app as application
Наконец, моя часть виртуального хоста http.conf:
WSGIPythonHome /Users/pauline/anaconda3
<VirtualHost *:80>
DocumentRoot "/Users/pauline/Documents/Code/platform_projects/image_download"
ServerName imageDownload.localhost
ServerAlias imageDownload.localhost
WSGIDaemonProcess image_download user=daemon group=daemon threads=5 home=/Users/pauline/Documents/Code/platform_projects/image_download python-path=/Users/pauline/Documents/Code/platform_projects/image_download:/Users/pauline/anaconda3/lib/python3.6/site-packages
WSGIScriptAlias / /Users/pauline/Documents/Code/platform_projects/image_download/image_download.wsgi
<Directory /Users/pauline/Documents/Code/platform_projects/image_download>
WSGIProcessGroup image_download
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
Когда я запускаю свое приложение как локальный хост, оно выдает Ошибка сервера! Ошибка 500 , и когда я проверяю журнал ошибок apache, он говорит следующее:
[wsgi:error] [pid 6011] [remote ::1:50865] mod_wsgi (pid=6011): Target WSGI script '/Users/pauline/Documents/Code/platform_projects/image_download/image_download.wsgi' cannot be loaded as Python module.
[wsgi:error] [pid 6011] [remote ::1:50865] mod_wsgi (pid=6011): Exception occurred processing WSGI script '/Users/pauline/Documents/Code/platform_projects/image_download/image_download.wsgi'.
[wsgi:error] [pid 6011] [remote ::1:50865] Traceback (most recent call last):
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/werkzeug/http.py", line 27, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from urllib.request import parse_http_list as _parse_list_header
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/urllib/request.py", line 2585, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from _scproxy import _get_proxy_settings, _get_proxies
[wsgi:error] [pid 6011] [remote ::1:50865] ImportError: dlopen(/Users/pauline/anaconda3/lib/python3.6/lib-dynload/_scproxy.cpython-36m-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
[wsgi:error] [pid 6011] [remote ::1:50865] Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
[wsgi:error] [pid 6011] [remote ::1:50865] Expected in: /Applications/XAMPP/xamppfiles/lib/libjpeg.8.dylib
[wsgi:error] [pid 6011] [remote ::1:50865] in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
[wsgi:error] [pid 6011] [remote ::1:50865]
[wsgi:error] [pid 6011] [remote ::1:50865] During handling of the above exception, another exception occurred:
[wsgi:error] [pid 6011] [remote ::1:50865]
[wsgi:error] [pid 6011] [remote ::1:50865] Traceback (most recent call last):
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/Documents/Code/platform_projects/image_download/image_download.wsgi", line 13, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from image_download import app as application
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/Documents/Code/platform_projects/image_download/image_download.py", line 9, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from flask import Flask
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/flask/__init__.py", line 17, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from werkzeug.exceptions import abort
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/werkzeug/__init__.py", line 151, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] __import__('werkzeug.exceptions')
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/werkzeug/exceptions.py", line 71, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from werkzeug.wrappers import Response
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/werkzeug/wrappers.py", line 27, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from werkzeug.http import HTTP_STATUS_CODES, \\
[wsgi:error] [pid 6011] [remote ::1:50865] File "/Users/pauline/anaconda3/lib/python3.6/site-packages/werkzeug/http.py", line 30, in <module>
[wsgi:error] [pid 6011] [remote ::1:50865] from urllib2 import parse_http_list as _parse_list_header, \\
[wsgi:error] [pid 6011] [remote ::1:50865] ModuleNotFoundError: No module named 'urllib2'
Когда я запускаю программу через Flask, она работает совершенно нормально. Однако, когда он запускается через apache localhost, он показывает ошибку сервера. Поэтому я в основном подозреваю, что проблема связана с неправильной установкой mod_wsgi.so
, однако я не могу отладить ее, хотя шаги установки (упомянутые выше), похоже, были правильными.