我正在尝试使用apache2服务器和mod_wsgi在ec2实例上设置一个简单的烧瓶应用程序。似乎有不成比例的diffculty配置正确的python路径供mod_wsgi使用。
我已在下面放置了代码段。
我得到apache2日志的错误是:
追踪(最近一次通话): 文件" /var/www/html/flaskapp_tut/flaskapp_tut.wsgi" ;,第7行,在 来自flaskapp_tut导入应用程序作为应用程序 ]文件" /var/www/html/flaskapp_tut/flaskapp_tut.py" ;,第1行,在 来自flask进口烧瓶 ImportError:没有名为flask的模块
flask肯定是通过anaconda安装安装的,但显然mod_wsgi正在使用错误的python版本。
日志文件说它使用: apache / 2.4.7(Ubuntu)mod_wsgi / 3.4配置Python / 2.7.6 - 恢复正常操作
但是我使用的是python 3.x,当我使用命令&#34时,anaconda安装显示;#py;"即/ home / ubuntu / anaconda3 / bin / python
mod_wsgi文档说你可以配置python路径: WSGIPythonHome / home / ubuntu / anaconda3 / bin / python,但是我不知道在哪里放置这个配置。
非常感谢任何帮助。根据我作为指南使用的步骤,这看起来好像应该比它更直接。 http://www.datasciencebytes.com/bytes/2015/02/24/running-a-flask-app-on-aws-ec2/
flaskapp_tut.wsgi
#!/home/ubuntu/anaconda3/bin/python
import sys
sys.path.insert(0, '/var/www/html/flaskapp_tut')
sys.path.append('/home/ubuntu/anaconda3/bin/python')
from flaskapp_tut import app as application
flaskapp_tut.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello from Flask!'
if __name__ == '__main__':
app.run()
000-default.conf文件中的设置
DocumentRoot /var/www/html
WSGIDaemonProcess flaskapp_tut threads=5
WSGIScriptAlias / /var/www/html/flaskapp_tut/flaskapp_tut.wsgi
<Directory flaskapp_tut>
WSGIProcessGroup flaskapp_tut
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
答案 0 :(得分:2)
mod_wsgi/3.4 Python/2.7.6
这是一个相当古老的mod_wsgi,这告诉你的是你安装的mod_wsgi是针对Python / 2.7.6编译的。
我建议你获得一个当前的mod_wsgi,并确保它是针对python-3.x编译的。
另外,(我不认为这会解决你的问题,但值得一提)你可以指定一个python-path作为WSGIDaemonProcess
的参数。这可能有助于您至少看到正确的东西(在某些情况下可能比在代码中放置sys.path.append()
更干净)。见这里:http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html。
答案 1 :(得分:0)
我最近通过从源代码构建来安装mod_wsgi
mod_wsgi Quick Configuration Guide
mod_wsgi Configuring The Source Code
我想使用Python 3.7,所以(从源代码)安装了它,而我的Python3.7可执行文件(在Ubuntu 18.04上)的位置是:
/usr/local/bin/python3.7
可以通过以下方式找到此位置:
which python3.7
在配置mod_wsgi的过程中,这正是我的确切操作,以确保我的mod_wsgi是针对已安装的Python3.7进行编译的。当我最初仅运行./configure
时,mod_wsgi
将默认使用Python2.7可执行文件。
./configure --with-python=/usr/local/bin/python3.7
答案 2 :(得分:0)
它以这种方式对我有效(Debian 9):
首先,安装为python3编译的mod-wsgi
sudo apt-get install libapache2-mod-wsgi-py3
第二,添加python虚拟环境。库wsgi脚本中的路径:(start-jobs-backend.wsgi)。还添加function application
#!/usr/bin/python3
import sys
import os
sys.path.insert(0, '/path/to/backend')
sys.path.insert(0, '/path/to/venv/lib/python3.7/site-packages')
def application(environ, start_response):
status = '200 OK'
output = b'Hello World! \n'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
from yourproject import app as application
第三,apache conf
<VirtualHost>
WSGIDaemonProcess backend user=www-data group=www-data threads=5
WSGIScriptAlias / /path/to/backend/start-jobs-backend.wsgi
DocumentRoot /path/to/backend
<Files start-jobs-backend.wsgi>
Require all granted
</Files>
<Directory /path/to/backend>
AddHandler wsgi-script .wsgi
WSGIProcessGroup backend
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Options Indexes FollowSymLinks MultiViews ExecCGI
Require all granted
</Directory>
</VirtualHost>
我花了一个星期的时间为我的第一个带有wsgi部署选项的烧瓶应用程序进行了开发,希望它可以为您提供帮助。
答案 3 :(得分:0)
如果您使用虚拟环境,强烈建议使用以下格式:
$openssl req -newkey rsa:2048 -keyout privkey.pem -x509 -days 36500 -out certificate.pem