【问题标题】:Flask app can't find module when deployed to azure - works fine locallyFlask 应用程序在部署到 azure 时找不到模块 - 在本地工作正常
【发布时间】:2019-05-29 02:58:18
【问题描述】:

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

我不确定为什么它在本地运行良好,但在 webapp 上时无法从 Forms.py 导入。我很确定它与文件结构有关,但我不知道是什么以及如何修复它。

【问题讨论】:

    标签: python azure flask importerror


    【解决方案1】:

    尝试将Forms.py 移动到文件夹views
    auth.py
    import sys
    sys.path.append('../')
    中添加这两行 将“../”路径添加到 PYTHONPATH。
    希望它有效。

    【讨论】:

    • 感谢您的帮助。该目录已经包含在 sys.patth 中(来自 print(sys.path)),但我还是尝试了,但没有运气。将 Forms.py 移动到 forms/Forms.py 确实消除了错误,但现在工作人员只是超时而没有错误消息。
    【解决方案2】:

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

    我猜你是在 Python 虚拟环境中本地开发的,所以当你命令source &lt;project_root&gt;/bin/active 启用虚拟环境时,sys.path 会自动包含你的项目路径。但是没有虚拟环境,你的项目路径不会默认导入到系统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 *
    

    【讨论】:

    • 感谢您的帮助。该目录已包含在 sys.patth 中(来自 print(sys.path)),但我还是尝试了,但没有成功。我还尝试了上面的其他响应以将“../”添加到路径中,但这也不起作用。将 Forms.py 移动到 forms/Forms.py 确实消除了错误,但现在工作人员只是超时而没有错误消息。
    猜你喜欢
    • 2014-04-20
    • 2019-07-20
    • 2016-06-20
    • 2014-08-25
    • 2020-02-17
    • 2020-02-09
    • 2020-05-05
    • 2014-11-02
    • 2016-04-22
    相关资源
    最近更新 更多