无法通过uWSGI和NGINX导入名称“ app”

时间:2018-11-29 17:46:01

标签: python flask uwsgi wsgi

我正在尝试将Flask网站安装到NGINX上,但是在使Flask服务器联机时遇到问题。

我已经遵循this DigitalOcean教程,并且我也使用了多个SO问题,但没有任何帮助。 如果我运行uwsgi --socket 127.0.0.1:8080 --protocol=http --module wsgi --callable app, 我可以获得的唯一有用的追溯是:

Traceback (most recent call last):
  File "./wsgi.py", line 1, in <module>
    from app import app
ImportError: cannot import name 'app'
unable to load app 0 (mountpoint='') (callable not found or import error)

我的目录结构如下:

Xerix/
  __pycache__/
  app/
    __init.py__
    static
    templates
    xerix.db
  cert/
    xerix_me.crt
  flask/ (virtualenv)
  wsgi.py
  xerix.ini

如果我运行journalctl -u xerix,我会得到:

Nov 29 17:43:18 xerix systemd[1]: Started uWSGI instance to serve xerix.
Nov 29 17:43:18 xerix systemd[1]: xerix.service: Main process exited, code=exited, status=203/EXEC
Nov 29 17:43:18 xerix systemd[1]: xerix.service: Failed with result 'exit-code'.

(这是最近的日志)

如何解决此问题,该怎么办?

任何帮助都将受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题与nginx无关。您必须告诉uwsgi在哪里可以找到您的库和依赖项。在Xerix文件夹下创建一个具有以下内容的from abc import ABCMeta, abstractmethod class AbsObj(metaclass=ABCMeta): @abstractmethod def foo(self): '''Document this.''' pass @staticmethod def create(stuff): ''' All the user needs to know is that create returns an AbsObj. The specific implementation shouldn't matter. ''' if stuff: return Obj1(stuff) else: return Obj2(stuff) class Obj1(AbsObj): def foo(self): print('number 1') class Obj2(AbsObj): def foo(self): print('number 2') AbsObj.create(True).foo AbsObj.create(False).foo 文件:

myapp.wsgi

保存并像这样运行uwsgi:

# myapp.wsgi
from app import app as application

您可能需要根据python版本来稍微调整路径。