EC2 Ubuntu 上的 Flask 服务器 运行 找不到 python 包

Flask server running on EC2 Ubuntu cannot find the python packages

我是 运行 一个使用 AWS EC2 和 Apache 的烧瓶服务器。问题是烧瓶服务器无法识别 python 包在哪里。

Python 包位于 '/home/ubuntu/.local/lib/python3.8/site-packages/'

下面是/var/www/html/flaskapp/flaskapp.py

    import numpy as np
        
    from flask import Flask, jsonify
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():

            return jsonify("Hello From Flask")
    
    @app.route('/countme/<input_str>')
    def count_me(input_str, methods = ['GET']):
            return jsonify(input_str)
    
    if __name__ == '__main__':
            app.run()

当我尝试访问我的服务器时,出现此错误

    ModuleNotFoundError: No module named 'numpy'

下面是'flaskapp.wsgi'

    import sys
    import site
    
    sys.path.insert(0, '/var/www/html/flaskapp')
    
    from flaskapp import app as application

下面是'/etc/apache2/sites-enabled/000-default.conf'

    <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
    
            WSGIDaemonProcess flaskapp threads=5 python-path=/var/www/html/flaskapp/flaskapp
            WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
    
            <Directory flaskapp>
                    WSGIProcessGroup flaskapp
                    WSGIApplicationGroup %{GLOBAL}
                    Order deny,allow
                    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

谁能告诉我我应该怎么做才能让 flaskapp 找到包在哪里?

您需要执行以下操作:

  1. 为 python3
  2. 安装 mod-wsgi
sudo apt-get install libapache2-mod-wsgi-py3

这将替换 libapache2-mod-wsgi 并将重新启动 apache 服务。

  1. 将您的 python 包路径添加到位于 /etc/apache2/sites-enabled/000-default.conf
  2. 的脚本中
WSGIPythonHome "/usr/local/bin"
WSGIPythonPath "/home/ubuntu/.local/lib/python3.8/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

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

    <Directory flaskapp>
            WSGIProcessGroup flaskapp
            WSGIApplicationGroup %{GLOBAL}
            Order deny,allow
            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>