簡體   English   中英

使用 mod_wsgi 配置 python 路徑

[英]Configure python path using mod_wsgi

我正在嘗試在帶有 apache2 服務器和 mod_wsgi 的 ec2 實例上設置一個簡單的燒瓶應用程序。 似乎在為 mod_wsgi 配置正確的 python 路徑時遇到了不成比例的困難。

我在下面放置了代碼片段。

我得到 apache2 日志的錯誤是:

Traceback (most recent call last):
  File "/var/www/html/flaskapp_tut/flaskapp_tut.wsgi", line 7, in <module>
    from flaskapp_tut import app as application
]  File "/var/www/html/flaskapp_tut/flaskapp_tut.py", line 1, in <module>
from flask import Flask
 ImportError: No module named flask

flask 肯定是通過 anaconda 安裝安裝的,但是很明顯 mod_wsgi 使用了錯誤版本的 python。

日志文件說它使用:apache/2.4.7 (Ubuntu) mod_wsgi/3.4 Python/2.7.6 配置——恢復正常操作

但是,我使用的是 python 3.x,當我使用命令“which python”即 /home/ubuntu/anaconda3/bin/python 時,anaconda 安裝顯示

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>

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

它以這種方式對我有用(Debian 9):

首先,安裝為python3編譯的mod-wsgi

sudo apt-get install libapache2-mod-wsgi-py3 

其次,添加python虛擬環境。 庫。 wsgi 腳本中的路徑: (start-jobs-backend.wsgi) 。 還添加功能應用程序

 #!/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配置

<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 部署選項的 Flask 應用程序工作,希望它可以幫助你。

我最近通過從源代碼構建它來安裝 mod_wsgi

mod_wsgi 快速配置指南
mod_wsgi 配置源代碼

我想使用 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

如果您使用虛擬環境,強烈建議使用以下格式:

import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/home/Flask/Api/')
sys.path.append('/home/Flask/fenv/lib/python3.6/site-packages/')
from run import app as application

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM