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导入。我很确定它与文件结构有关,但是我不知道该怎么修复。
答案 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 *