uwsgi внутри вызываемой файловой ошибки импорта модуля
Я реализую uwsgi с помощью nginx, и я использую эту структуру для своих файлов в каталоге приложения:
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 => 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')
это не имеет никакого эффекта вообще.
Упрощенный вопрос: Позвольте мне упростить мой вопрос: почему интерпретатор python virtualenv не находит модули, которые находятся рядом с вызываемым файлом, который используется для uwsgi (в моем случае wsgi.py
файл)?
ОБНОВЛЕНИЕ 2: я переехал main.py
файл из my_app
папка на один верхний путь, означающий, что теперь он находится в myappfolder / main.py
а теперь wsgi.py
Файл может видеть и импортировать его. Почему, когда он находился в подкаталоге, его не видели wsgi.py
файл?
1 ответ
Я наконец нашел то, что продолжалось. 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, которая заставила меня застрять почти на два дня.