Flask应用程序部署到Azure时找不到模块-在本地可以正常运行

时间:2019-05-29 02:58:19

标签: python azure flask importerror

Azure给出了模块导入错误,但相同的代码在本地完美运行。

2019-05-29T02:50:47.388004719Z: [ERROR]  Traceback (most recent call last):
2019-05-29T02:50:47.388027419Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2019-05-29T02:50:47.388031719Z: [ERROR]      worker.init_process()
2019-05-29T02:50:47.388035419Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
2019-05-29T02:50:47.388039419Z: [ERROR]      self.load_wsgi()
2019-05-29T02:50:47.388043019Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2019-05-29T02:50:47.388047119Z: [ERROR]      self.wsgi = self.app.wsgi()
2019-05-29T02:50:47.388050819Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2019-05-29T02:50:47.388054619Z: [ERROR]      self.callable = self.load()
2019-05-29T02:50:47.388075019Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2019-05-29T02:50:47.388084919Z: [ERROR]      return self.load_wsgiapp()
2019-05-29T02:50:47.388088619Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2019-05-29T02:50:47.388092219Z: [ERROR]      return util.import_app(self.app_uri)
2019-05-29T02:50:47.388095619Z: [ERROR]    File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
2019-05-29T02:50:47.388099119Z: [ERROR]      __import__(module)
2019-05-29T02:50:47.388102419Z: [ERROR]    File "/home/site/wwwroot/app.py", line 102, in <module>
2019-05-29T02:50:47.388106219Z: [ERROR]      from views.auth import register_user_bp, user_login_bp, user_logout_bp
2019-05-29T02:50:47.388109619Z: [ERROR]    File "/home/site/wwwroot/views/auth.py", line 4, in <module>
2019-05-29T02:50:47.388113619Z: [ERROR]      from Forms import *
2019-05-29T02:50:47.388116919Z: [ERROR]  ModuleNotFoundError: No module named 'Forms'

似乎在我的自定义模块中找到了一个,但在子目录的根目录中却找不到。但是,它似乎已成功从app.py导入了Config.py,它们都在根目录中。

如果重要的话,程序将从根目录中的app.py运行

我认为不了解gunicorn / WSGI的工作方式。我无法弄清楚导入行为的哪些变化。

project_root
├── app.py
├── Config.py
├── Forms.py
├── __init__.py
├── manage.py
├── migrations
├── Models.py
├── requirements.txt
├── static
├── templates
│   ├── change_profile.html
│   ├── dash_app_layout.py
│   ├── default_login.html
│   ├── default_logout.html
│   ├── _formhelpers.html
│   ├── header.html
│   ├── index.html
│   ├── __init__.py
│   ├── nav_layout.py
│   ├── record_meeting.html
│   ├── register_user.html
│   ├── upload_meeting.html
│   └── voice_enroll.html
├── utils
│   ├── audio_processor
│   │   ├── AudioProcessor.py
│   │   ├── audio_type_converter.py
│   │   ├── Deidentifier.py
│   │   ├── Identification
│   │   ├── __init__.py
│   │   ├── Utterance.py
│   │   └── voice_enroll.py
│   ├── db_operations.py
│   ├── __init__.py
│   ├── interim_result_processor.py
│   └── utils.py
└── views
    ├── auth.py
    ├── dash_callbacks.py
    ├── __init__.py
    ├── meeting_upload.py
    ├── profile.py
    └── record_meeting.py

我不确定为什么它在本地可以正常运行,但是在Web应用程序上时无法从Forms.py导入。我很确定它与文件结构有关,但是我不知道该怎么修复。

2 个答案:

答案 0 :(得分:0)

尝试将Forms.py移至文件夹views
将这两行添加到auth.py
import sys
sys.path.append('../')
将“ ../”路径添加到PYTHONPATH。
希望它能起作用。

答案 1 :(得分:0)

我试图重现您的问题,然后发现问题可能是由于您在sys.path中缺少项目路径所致。

我猜您是在Python虚拟环境中本地开发的,所以当您命令sys.path启用虚拟环境时,source <project_root>/bin/active将自动包含您的项目路径。但是在没有虚拟环境的情况下,您的项目路径将不会默认导入到系统Python运行时的sys.path中。

因此,解决方案是您可以通过将新的代码行添加到/home/site/wwwroot中来手动将sys.path附加到app.py,如下所示。

from flask import Flask

import sys
sys.path.append('/home/site/wwwroot')

# Then you can normally import Forms module
from Forms import *