Python flask应用程序在本地运行,但部署到heroku时崩溃

Python flask应用程序在本地运行,但部署到heroku时崩溃,python,flask,heroku,gunicorn,Python,Flask,Heroku,Gunicorn,我有一个flask应用程序在部署到Heroku时崩溃,它在本地运行良好,使用Procfilegunicorn wsgi:app中完全相同的命令 相关heroku日志: 2021-02-02T00:10:31.529605+00:00 app[web.1]: File "/app/wsgi.py", line 4, in <module> 2021-02-02T00:10:31.529605+00:00 app[web.1]: app = create_

我有一个flask应用程序在部署到Heroku时崩溃,它在本地运行良好,使用Procfile
gunicorn wsgi:app中完全相同的命令

相关heroku日志:

2021-02-02T00:10:31.529605+00:00 app[web.1]:   File "/app/wsgi.py", line 4, in <module>
2021-02-02T00:10:31.529605+00:00 app[web.1]:     app = create_app()
2021-02-02T00:10:31.529606+00:00 app[web.1]:   File "/app/app/__init__.py", line 15, in create_app
2021-02-02T00:10:31.529606+00:00 app[web.1]:     from . import routes
2021-02-02T00:10:31.529606+00:00 app[web.1]:   File "/app/app/routes.py", line 6, in <module>
2021-02-02T00:10:31.529606+00:00 app[web.1]:     from package.reservation_factory import ReservationFactory
2021-02-02T00:10:31.529606+00:00 app[web.1]:   File "/app/package/reservation_factory.py", line 2, in <module>
2021-02-02T00:10:31.529607+00:00 app[web.1]:     from package.provider import ProviderReservation
2021-02-02T00:10:31.529607+00:00 app[web.1]:   File "/app/package/provider.py", line 12, in <module>
2021-02-02T00:10:31.529607+00:00 app[web.1]:     from package.reservation import Reservation
2021-02-02T00:10:31.529608+00:00 app[web.1]: ModuleNotFoundError: No module named 'package.reservation'
2021-02-02T00:10:31.529902+00:00 app[web.1]: [2021-02-02 00:10:31 +0000] [7] [INFO] Worker exiting (pid: 7)

项目结构的问题是缺少顶层
\uuuu init\uuuuu.py
文件。这个文件是制作Python包所必需的,您可以从中导入

虽然不是强制性的,但许多项目都采用
src
布局,如下所示:

❯ tree src/
src/
└── reservation_app
    ├── app
    │   ├── forms.py
    │   ├── __init__.py
    │   ├── routes.py
    │   └── templates
    ├── __init__.py
    └── package
        ├── __init__.py
        ├── provider.py
        ├── reservation_factory.py
        └── reservation.py

4 directories, 8 files
不过,您需要调整您的导入

如果您想了解更多关于为什么
src
布局是件好事的信息,请查看这些博客文章


感谢您的回答,但不幸的是,Heroku在将
\uuu init\uuuu.py
添加到顶层后仍会因相同的错误崩溃。此外,缺少的模块来自package.provider import provider reservation的调用
,该调用来自package.reservation的另一个调用
\u factory import ReservationFactory
,两者都位于同一
package
目录中。这不意味着应用程序已经能够找到目录了吗?你能给你展示一下新的目录结构吗?无法从包中执行。提供程序导入smth。。您必须从xxx.package.provider.reservation\u factory import ReservationFactory执行
,因此始终从顶层执行。你的应用程序在GitHub上可用吗?然后我可以看一看。否则,请尝试遵循我的模式,并首先确保它在本地工作。(Disclamier:我从未使用过Heroku,但我创建了相当多的Flask应用程序,并将它们部署到生产环境中)。它在本地一直运行良好,问题在于Heroku的部署。不管怎么说,我把文件名和导入从
reservation
改为
reservations
,现在可以了,不要再碰它了-不管怎样,很高兴听到它在工作。
❯ tree src/
src/
└── reservation_app
    ├── app
    │   ├── forms.py
    │   ├── __init__.py
    │   ├── routes.py
    │   └── templates
    ├── __init__.py
    └── package
        ├── __init__.py
        ├── provider.py
        ├── reservation_factory.py
        └── reservation.py

4 directories, 8 files