我正在用nginx实现uwsgi,我在我的app目录中使用这个结构:
myappfolder / my_app
myappfolder / my_app / main.py
myappfolder / my_app_venv
myappfolder / wsgi.py
我已经设置了一个python virtualenv来保存我的应用程序并在其中安装了uwsgi(在https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-applications-using-uwsgi-web-server-with-nginx的教程之后)
在该链接中提到的默认设置的开头,服务器工作正常,我使用此命令运行uwsgi:uwsgi --socket 127.0.0.1:12345 -w wsgi &
,但在调整了wsgi.py
文件中的代码并将其设为此方式:
#!/usr/bin/env python3
import sys
sys.path.append('/root/myappfolder')
from my_app.main import Main
fff = Main()
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [fff.sayHello(), str(env)]
然后,当我运行uwsgi时,它给了我来自python interpreter的错误=> ImportError: No module named my_app.main
在my_app / main.py
档案中:
#!/usr/bin/env python3
class Main:
def sayHello(self):
return("hello world!")
问题的原因是什么?
更新1: 即使在import sys
文件中的wsgi.py
后使用sys.path.append('the path to myappfolder')
它也没有效果。
问题简化:让我简化一下我的问题:为什么virtualenv的python解释器找不到用于uwsgi的可调用文件旁边的模块(在我的情况下{{1文件)?
更新2 :我将wsgi.py
文件从main.py
文件夹移到了一个上方路径,这意味着它现在位于my_app
,现在是{{1} }文件可以查看和导入它。为什么当它在子目录下时,myappfolder / main.py
文件没有看到它?
答案 0 :(得分:3)
我终于找到了发生的事情。 uwsgi 正在使用Python 2.7,它要求您在每个文件夹模块中使用 __ init __。py 文件。即使是空文件。现在修复了问题,从问题中提到的目录结构转移到下面写的那个:
myappfolder / my_app
myappfolder / my_app / main.py
myappfolder / my_app / __init__.py # empty file
myappfolder / my_app_venv
myappfolder / wsgi.py
这是python 2.X和3.X的最大区别,这让我陷入了将近两天的困境。