Использование gunicorn для запуска myapp выдает ошибку «Нет модуля с именем myapp» - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть существующее приложение Flask под названием myapp, которое компилируется с помощью pyinstaller

Когда я запускаю gunicorn с myapp, выдается следующая ошибка

$ gunicorn myapp:app
[2019-04-02 22:08:16 +0000] [478] [INFO] Starting gunicorn 19.9.0
[2019-04-02 22:08:16 +0000] [478] [INFO] Listening at: http://127.0.0.1:8000 (478)
[2019-04-02 22:08:16 +0000] [478] [INFO] Using worker: sync
[2019-04-02 22:08:16 +0000] [481] [INFO] Booting worker with pid: 481
[2019-04-02 22:08:16 +0000] [481] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
ImportError: No module named 'myapp' <===============
[2019-04-02 22:08:16 +0000] [481] [INFO] Worker exiting (pid: 481)
[2019-04-02 22:08:16 +0000] [478] [INFO] Shutting down: Master
[2019-04-02 22:08:16 +0000] [478] [INFO] Reason: Worker failed to boot.

myapp создается путем статического связывания несколькихФайлы Python

a = Analysis(['c.py', 'd.py', 'e.py', 'f.py', 'g.py', 'main.py'],
             pathex=['/src/myapp'],
             binaries=[],
             datas=[],
             hiddenimports=['configparser'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='myapp',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

myapp прекрасно работает для меня с точки зрения автономного сервера Flask.Теперь мне нужно перейти на gunicorn + Flask, чтобы избавиться от ограничений Flask (обратите внимание, что myapp вызывается только из другой внутренней службы, и мне не нужны веб-страницы доступа / nginx / html и т. Д., Только для обслуживания вызовов Rest)myapp)

Вот как выглядит main.py


app = Flask(__name__)

...
def runServer(args):
    app.logger.info('Starting myapp service')
    app.run('0.0.0.0', port=args.port) <=============
...

def main():
    rv = 0  # Always return 0 by default
    args = parse_args()
    if args.which == 'server':
        runServer(args)
.....

if __name__ == '__main__':
    sys.exit(main())

Когда я запускаю команду gunicorn внутри моего каталога сборки следующим образом, она отлично работает

$ gunicorn main:app
[2019-04-02 22:30:55 +0000] [482] [INFO] Starting gunicorn 19.9.0
[2019-04-02 22:30:55 +0000] [482] [INFO] Listening at: http://127.0.0.1:8000 (482)
[2019-04-02 22:30:55 +0000] [482] [INFO] Using worker: sync
[2019-04-02 22:30:55 +0000] [485] [INFO] Booting worker with pid: 485

Но я хочу, чтобы он запускался там, где я устанавливаю myapp, а не из каталога сборки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...