gpt4 book ai didi

python-3.x - 让 Flask 使用 Python3 (Apache/mod_wsgi)

转载 作者:行者123 更新时间:2023-12-03 15:26:16 28 4
gpt4 key购买 nike

我正在运行一个基本的“hello world”Flask 应用程序。

我在 Ubuntu 14.04 上,使用 Apache 2.4。我已经安装了 mod_wsgi。

我创建了一个 ~/web/piFlask/venv/保存一个安装了 flask 的 virtualenv 创建的 Python2。

但是,我希望我的 flaskapp 导入我编写的 Python3.x 模块。

我需要做什么才能做到这一点?

我尝试创建一个 ~/web/piFlask/venv3/和修改~/web/piFlask/piFlask.wsgi :

import os, sys

PROJECT_DIR = '/home/pi/web/piFlask'

activate_this = os.path.join(PROJECT_DIR, 'venv3/bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, PROJECT_DIR)

from piFlask import app as application

application.debug = True

但我认为这还不够。这个 .wsgi 实际上是一个 Python 文件,将由 mod_wsgi 执行,我确信它会使用 Py2.x 解释器来执行。

因此,如果我理解正确,mod_wsgi 会启动系统 Python 以执行此 .wsgi,而这又会启动我的 ~/web/piFlask/venv/。解释器实际处理请求。

我想我可以通过设置 WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages 来说服 mod_wsgi 使用系统 Python3 或我自己的 venv3/...在/etc/apache2/mods-available/wsgi.conf

但是我在某处找到了一条指令,说您必须为 Py3 编译 mod_wsgi,而底部很快就出现了这个问题。

最佳答案

花了我一段时间,虽然最后真的很简单。不幸的是,我丢失了我的 bash 历史记录,因此如果您发现错误,请在更正中发表评论或进行编辑。

请注意,我已经让 mod_wsgi 工作了,所以我必须删除它:

$ a2dismod wsgi
$ sudo apt-get remove libapache2-mod-wsgi

编辑:由于 apt-get 安装了一个过时的包(这会导致 Apache 的错误日志中出现一个小错误),我在撰写本文时不推荐这个:
$ sudo apt-get install libapache2-mod-wsgi-py3
$ a2enmod wsgi

相反,首先设置你的 py3 虚拟环境,(还不如在你使用 Flask 的时候安装它)
$ pip install virtualenv

$ cd ~/web/flaskapp
$ virtualenv -p python3 ./venv3
$ source ./venv3/bin/activate # enter virtual environment
$ pip install Flask

现在关注 Installing mod_wsgi for Python3 on Ubuntu将 mod_wsgi 安装到这个 venv 中,然后...
$ deactivate                      #  ... & exit

这是来自最初的 apt-get 方法,现在不相关了:

Now I have to make mod_wsgi use this new Py3:

$ sudo nano /etc/apache2/mods-enabled/wsgi.conf

And do:

#WSGIPythonPath directory|directory-1:directory-2:...
WSGIPythonPath /home/pi/web/flaskapp/venv3/lib/python3.4/site-packages


最后我需要修改我的 ~/web/flaskapp/flaskapp.wsgi 以便它现在支持 Python3:
$ cat web/piFlask/piFlask.wsgi

# http://flask.pocoo.org/docs/0.10/deploying/mod_wsgi/#creating-a-wsgi-file
# http://www.enigmeta.com/2012/08/16/starting-flask/

# for Py3:
# http://askubuntu.com/questions/488529/pyvenv-3-4-error-returned-non-zero-exit-status-1

import os, sys

PROJECT_DIR = '/home/pi/web/flaskapp'
sys.path.insert(0, PROJECT_DIR)


def execfile(filename):
globals = dict( __file__ = filename )
exec( open(filename).read(), globals )

activate_this = os.path.join( PROJECT_DIR, 'venv3/bin', 'activate_this.py' )
execfile( activate_this )


from piFlask import app as application
application.debug = True

只是提醒一下当用户将浏览器指向 http://myfoo.org/flask 时 Apache 如何使用 mod_wsgi 来执行此文件。 :
$ cat /etc/apache2/sites-available/000-default.conf
:
WSGIDaemonProcess flaskProcess user=pi group=pi threads=5
WSGIScriptAlias /flask /home/pi/web/flaskapp/flaskapp.wsgi

<Location /flask>
WSGIProcessGroup flaskProcess
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Location>
:

讨论:我将 mod_wsgi 模块安装到 Apache 中似乎有点困惑,但它位于我的 flaskapp 文件夹中的 venv3 中。但这至少可以确保 Apache -> mod_wsgi ->(使用正确的,即 venv3 Python)-> {启动我的 FlaskApp}。

另一种方法是更新系统 Python,并使用它而不是 venv。

关于python-3.x - 让 Flask 使用 Python3 (Apache/mod_wsgi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642894/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com