【问题标题】:Can't import modules on EC2 - Flask App无法在 EC2 上导入模块 - Flask App
【发布时间】:2017-11-02 22:19:28
【问题描述】:

我无法在 EC2 微实例上的烧瓶应用程序中导入 NumPy、sklearn 等模块。

在 /home/ubuntu 目录中,我有一个目录 flaskapp,其中包含:

  1. flaskapp.py
  2. flaskapp.wsgi

flaskapp.py中的代码是:

import sys
import os
import shutil
import time
import traceback

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/predict')
def predict():
    from sklearn.externals import joblib
    import numpy as np
    clf = joblib.load("flaskapp/models/saved_model.pkl")
    print 'model loaded'
    if clf:
        try:
            prediction = list(clf.predict(np.array([['0', '100', '164', '150', '1']])))
            return jsonify({'prediction': prediction})
        except Exception, e:
            return "ERROR" + e
    else:
        print os.getcwd()
        return 'no model here'


if __name__ == '__main__':
    from sklearn.externals import joblib
    import numpy as np
    print "Imports Done"
    app.run(DEBUG=True)

flaskapp.wsgi 看起来像这样:

import sys
import site
site.addsitedir('/home/ubuntu/.local/lib/python2.7/site-packages')
sys.path.insert(0, '/var/www/html/flaskapp')
from flaskapp import app as application

根据以下问题: Numpy ImportError when deploying Flask App using mod_wsgi/Apache2

我将我的/etc/apache2/sites-enabled/000-default.conf(以及可用的站点)修改为:

WSGIPythonPath /usr/local/lib/python2.7/site-packages/
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html


        WSGIDaemonProcess flaskapp threads=5
        WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi

        <Directory flaskapp>
                WSGIProcessGroup flaskapp
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

转到 URL http://ec2-....compute-1.amazonaws.com/predict 会抛出:

500 内部服务器错误

服务器遇到内部错误,无法完成 你的申请。要么服务器超载,要么出现错误 应用程序。

错误日志显示如下:

[Thu Nov 02 22:15:21.936872 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592] [2017-11-02 22:15:21,936] ERROR in app: Exception on /predict [GET]
[Thu Nov 02 22:15:21.936900 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592] Traceback (most recent call last):
[Thu Nov 02 22:15:21.936903 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
[Thu Nov 02 22:15:21.936905 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     response = self.full_dispatch_request()
[Thu Nov 02 22:15:21.936907 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request
[Thu Nov 02 22:15:21.936909 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     rv = self.handle_user_exception(e)
[Thu Nov 02 22:15:21.936911 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1517, in handle_user_exception
[Thu Nov 02 22:15:21.936913 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     reraise(exc_type, exc_value, tb)
[Thu Nov 02 22:15:21.936915 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
[Thu Nov 02 22:15:21.936917 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     rv = self.dispatch_request()
[Thu Nov 02 22:15:21.936918 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
[Thu Nov 02 22:15:21.936920 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     return self.view_functions[rule.endpoint](**req.view_args)
[Thu Nov 02 22:15:21.936922 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]   File "/var/www/html/flaskapp/flaskapp.py", line 37, in predict
[Thu Nov 02 22:15:21.936924 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592]     import numpy as np
[Thu Nov 02 22:15:21.936931 2017] [wsgi:error] [pid 11753:tid 140263731681024] [client 130.245.192.4:11592] ImportError: No module named numpy

【问题讨论】:

    标签: python amazon-ec2 flask apache2 wsgi


    【解决方案1】:

    问题是 apache2 无法访问该目录。可悲的是,上面发布的问题中的评论很少,接受的答案不是正确的。

    如果对某人有帮助,请在此处添加解决方案:

    sudo chown -R www-data:www-data /home
    

    【讨论】:

      【解决方案2】:
      sudo groupadd www-data
      sudo usermod -a -G www-data ubuntu
      sudo chown root:www-data /home
      sudo chmod -R 775 /home
      

      这应该可以运行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-28
        • 2017-01-17
        • 2022-07-26
        • 2021-08-28
        • 2016-12-09
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多