为什么 uWSGI 无法定位 Flask 的 functools 模块?

Why is uWSGI incapable of locating the functools module for Flask?

我想知道如何使用 virtualenv 在 uWSGI 中运行 Flask web 应用程序。我有一个全局安装的 uWSGI,Flask 在我的项目的虚拟环境目录中安装了 pip。

在皇帝模式下启动 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

我尝试过的:

我该如何解决这个问题?

编辑 1

我仍在努力解决这个问题,我已经删除了 no-site 选项,但无法让它运行超过该选项。我最初认为这可能是从不同用户创建 virtualenv 的权限问题,但在运行 chown 后它仍然显示错误 ImportError: No module named site.

我还尝试创建一个简单的 hello world Flask 应用程序并将我的 hello.py 文件放在 virtualenv 目录中,因为我在论坛上看到了这个建议,但它没有帮不上忙我设置了 no-site = True,但我仍然看到 ImportError: No module named flask。不过,通过激活 virtualenv 并使用内置 Web 服务器运行 python hello.py,应用程序仍然可以正常运行。

我将系统重新映像到 Arch Linux 以删除尽可能多的变量,从源代码下载并构建 uWSGI,开始安装特定的 Python 版本并实现 Python Flask 不支持 3.2。当我在 Debian 上安装它时,它安装了 Python 3.2,而 Arch 的软件包有 3.4.2。由于3.4.x是Flask支持的,所以问题解决了

至于 Python 2.7 不工作,我不知道。