我有一个基本的“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,很快问题就解决了。
摘自P i的答案。以下内容现在可以解决问题:
$ sudo apt-get install libapache2-mod-wsgi-py3
$ a2enmod wsgi
正确,mod_wsgi需要为特定的Python版本编译,因为它实际上从未执行“Python”可执行文件。相反,Python库链接到mod_wsgi。
最终结果是您无法在使用Python 2解释器运行的应用程序中混合Python 3代码。
您必须考虑使代码在Python 2和Python 3下都可以运行,然后可以选择要使用的版本,并使用为您选择使用的版本编译的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
现在,在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)在回答中指