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, которая заставила меня застрять почти на два дня.

Другие вопросы по тегам