![](/img/trans.png)
[英]How to configure path for mod_wsgi (Python) and process the request
[英]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.