我试图在 heroku 上托管我的烧瓶 api,但是当将路径传递给我的应用程序时,我收到导入错误

im trying to host my flask api on heroku, but when passing the path to my app, i get an import error

我得到的错误:ImportError:试图在没有已知父包的情况下进行相对导入

我的文件夹结构:

-后端

__init.py:

has the create app method

run.py:

from . import create_app

if __name__ == "__main__":
   app = create_app("config")
   app.run(debug=True)

过程文件:

网络:gunicorn run:app

编辑:

我重新安排了应用结构:

  • init.py
  • procifle
  • extensions.py
  • src
  • init.py
  • run.py

init.py:

empty

src/init.py:

from ..extensions import db,migrate
has the create app method

src/run.py:

from src import create_app

if __name__ == "__main__":
  app = create_app("config")
  app.run(debug=True)

所以现在新的错误是:

编辑#2: 要指出的另一件事是,假设在 run.py 中我做了以下事情: 从后端导入 create_app()

I get the following error: no module named "Backend" why could that be?

有没有人遇到过类似的问题,我该如何解决?

根据新信息更新我想我们可以送你回家。

1.) 将 run.py 移到 procfile 旁边(同一目录)。那个“运行 文件”应该在 Heroku 中 /app/run.py 的那个顶级文件中。

文件组织的一个很好的基本模式是“模块化”所有内容(带有 __init__.py 文件的目录)。然后所有导入都来自顶层 run.py [进程是 运行ning from] 遍历子文件夹。只要你向下遍历进口,事情就会保持相当稳定。如果您尝试向上导航目录,则会出现问题。

解析任何导入,一开始可能会很棘手,但很快就会成为一种思维方式。

2.) 将 extensions.py 移动到 src(暂时)并导入 from src import foo

以下是我在 Heroku 中所有活跃的 Django 和类似应用程序 运行ning 中的模式。我多年来一直使用相同的布局。在下面的屏幕截图中,manage.py 是您的 run.py 的 Django 等价物。我没有在这个应用程序上使用 docker 图片,所以这不在等式中,只有代码和依赖项。

你的问题是完全可以理解的,很容易认为其他 Python 开发者总是这样做是理所当然的。