我想知道如何使用virtualenv在uWSGI中运行Flask Web应用程序。我有一个uWSGI的全局安装,Flask在我的项目的虚拟环境目录中安装了pip。
在emperor模式下启动uwsgi
时出现以下错误:
Traceback (most recent call last):
File "/var/www/myapp/MyModule/__init__.py", line 1, in <module>
from flask import Flask
File "/var/www/myapp/environment/lib/python2.7/site-packages/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/var/www/myapp/environment/lib/python2.7/site-packages/werkzeug/__init__.py", line 20, in <module>
from werkzeug._compat import iteritems
File "/var/www/myapp/environment/lib/python2.7/site-packages/werkzeug/_compat.py", line 3, in <module>
import functools
ImportError: No module named functools
我的 emperor.ini 文件如下所示:
[uwsgi]
daemonize = /var/log/uwsgi/emperor.log
touch-logreopen = /etc/uwsgi/logrotate.trigger
emperor = /etc/uwsgi/apps-enabled
pidfile = /var/run/uwsgi/emperor.pid
die-on-term = true
我的 /etc/uwsgi/apps-available/myapp.ini 文件如下所示:
[uwsgi]
socket = 127.0.0.1:9000
wsgi-file = /var/www/myapp/MyModule/__init__.py
virtualenv = /var/www/myapp/environment/
pythonpath = /var/www/myapp/environment/lib/python2.7/site-packages
pythonpath = /var/www/myapp/MyModule/
callable = app
no-site = True
processes = 4
threads = 2
logto = /var/log/uwsgi/myapp.log
此文件符号链接到 /etc/uwsgi/apps-enabled/myapp.ini
为了完整性,我使用systemd来管理Debian 7.7上的服务,我的启动文件如下所示:
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/apps-enabled --uid www-data --gid www-data
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]t
WantedBy=multi-user.target
我尝试过:
no-site
;省略它会导致无法加载名为site 我该如何解决这个问题?
编辑1
我还在努力解决这个问题,但我已经删除了no-site
选项,但却无法让它超越它。我最初认为从一个不同的用户创建virtualenv可能是一个权限问题,但是在运行chown之后它仍然显示 ImportError:No module named site 的错误。
我还尝试创建一个简单的hello world Flask应用程序并将我的 hello.py 文件放在virtualenv目录中,因为我在论坛中看到了这个建议,它没有帮助。我设置no-site = True
,我仍然看到 ImportError:没有名为flask的模块。尽管如此,通过激活virtualenv并使用内置Web服务器运行python hello.py
,应用程序运行良好。
答案 0 :(得分:0)
我将系统重新映像到Arch Linux以删除尽可能多的变量,从源代码下载和构建uWSGI,开始安装特定的Python版本并实现了Flask所支持的Python 3.2。当我在Debian上安装它时,它安装了Python 3.2,Arch的软件包安装了3.4.2。由于Flask支持3.4.x,因此问题得以解决。
就Python 2.7不起作用而言,我不知道。