当前位置: 首页 > 知识库问答 >
问题:

让烧瓶使用Python3(Apache/mod_wsgi)

章博耘
2023-03-14

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

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

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

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

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

我试着创建一个~/web/piFlask/venv3//code>并修改~/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,它将启动我的解释器来实际处理请求。

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

但我在某处发现一条指令,要求您为Py3编译mod\u wsgi,很快问题就解决了。


共有3个答案

华英睿
2023-03-14

摘自P i的答案。以下内容现在可以解决问题:

$ sudo apt-get install libapache2-mod-wsgi-py3
$ a2enmod wsgi
孟乐逸
2023-03-14

正确,mod_wsgi需要为特定的Python版本编译,因为它实际上从未执行“Python”可执行文件。相反,Python库链接到mod_wsgi。

最终结果是您无法在使用Python 2解释器运行的应用程序中混合Python 3代码。

您必须考虑使代码在Python 2和Python 3下都可以运行,然后可以选择要使用的版本,并使用为您选择使用的版本编译的mod_wsgi版本。

游勇军
2023-03-14

我花了一段时间,虽然最后真的很简单。不幸的是,我丢失了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

现在,在Ubuntu上为Python3安装mod\u wsgi,将mod\u wsgi安装到这个venv中,然后。。。

$ deactivate                      #  ... & exit

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

现在我必须让mod\u wsgi使用这个新的Py3:

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

并做到:

#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

这只是一个提醒,当用户将浏览器指向Apache时,Apache如何使用mod_wsgi来执行此文件http://myfoo.org/flask:

$ 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-

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

 类似资料:
  • 问题内容: 我已经运行了一个基本的“ hello world” Flask应用程序。 我在使用Apache 2.4的Ubuntu 14.04上。我已经安装了mod_wsgi。 我创建了一个以容纳安装了flask的virtualenv创建的Python2。 但是,我希望我的flaskapp导入我编写的Python3.x模块。 我需要怎么做才能做到这一点? 我尝试创建一个并修改 但是我认为这还不够。这

  • 我基本上使用了install命令“$pip install Flask”,当我试图运行一个程序时,它会说“找不到模块”Flask安装在“/usr/local/lib/python2.7/site包”中,但我认为pip的意义在于,我可以到处导入这些包。我试图在我的桌面上运行一个文件,甚至当我将Flask文件夹移动到桌面上时,它也不起作用。有什么建议吗?谢谢

  • 我发现很难找到有关这方面的资料。会是什么?我如何解决这个问题?有哪些可能的修复方法? UWSGI日志文件 时钟来源:unix检测到CPU核数:4当前工作目录:/home/pi检测到二进制路径:/usr/local/bin/uwsgi!!!没有内部路由支持,重建与pcre支持!!!*警告:您在没有主进程管理器的情况下运行uWSGI进程数限制为7336内存页大小为4096字节检测到最大文件描述符号:6

  • 我试图在python中构建一个可以从XAMPP的Apache运行的应用程序,因此我安装了flask(),并按照以下说明进行mod_wsgi安装http://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html.我使用XAMPP的Apache,版本2.4.29和anaconda的python 3.6.4

  • 我在应用程序帐户下有一个linux apache 2.4.12和mod_wsgi4.5.2(mod_wsgi.so安装到apache中)。Apache在应用程序帐户下的端口8050下运行。按照这个链接测试mod_wsgi工作:http://modwsgi.readthedocs.org/en/develop/user-guides/quick-configuration-guide.html#ws

  • 问题内容: 我试图用一个烧瓶形式的sqlalchemy请求的结果填充选择字段。 这是代码: 这是模板: 查看: 模型(仅粘贴了关联表和作者表,很多列都不用了) 我目前收到此错误: 我真正想要的是,选择字段显示作者姓名及其编号,然后将作者编号返回至应用程序(返回至位于头的名为“ add_author”的函数)。 谢谢。 问题答案: 您有两个问题: 正如肖恩·维埃拉(Sean Vieira)在回答中指