【问题标题】:Flask ImportError: cannot import name 'app' on herokuFlask ImportError:无法在heroku上导入名称'app'
【发布时间】:2021-06-28 23:06:00
【问题描述】:

我创建了一个部署在 Heroku 上的 flask+react 应用程序,在我尝试添加数据库并尝试解决循环导入问题之前,它一切正常。现在,我的结构如下:

api/__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from api.config import Config

app = Flask(__name__, static_folder="../build", static_url_path="/")
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

import api.models

Procfile

web: flask db upgrade; gunicorn --pythonpath api api:app

还有我的主文件api/api.py

from flask import Flask
from api import app, db
from api.models import Scab

@app.route('/api/home')
def home():
   pass

# More routes

这是我的api/.flaskenv 文件

FLASK_APP=api.py
FLASK_ENV=development

这一切在本地都可以正常工作,但是当我在 Heroku 上部署它时,我得到 ImportError 和另一个错误:没有这样的命令 'db'。以下是日志:

2021-04-02T00:20:18.544760+00:00 app[web.1]: Error: No such command 'db'.
2021-04-02T00:20:19.505547+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Starting gunicorn 20.0.4
2021-04-02T00:20:19.506386+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Listening at: http://0.0.0.0:10654 (9)
2021-04-02T00:20:19.506514+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [9] [INFO] Using worker: sync
2021-04-02T00:20:19.586590+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [12] [INFO] Booting worker with pid: 12
2021-04-02T00:20:19.614419+00:00 app[web.1]: [2021-04-02 00:20:19 +0000] [13] [INFO] Booting worker with pid: 13
2021-04-02T00:20:19.690243+00:00 heroku[web.1]: State changed from starting to up
2021-04-02T00:20:20.419746+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [13] [ERROR] Exception in worker process
2021-04-02T00:20:20.419759+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.419760+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-04-02T00:20:20.419761+00:00 app[web.1]: worker.init_process()
2021-04-02T00:20:20.419762+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-04-02T00:20:20.419762+00:00 app[web.1]: self.load_wsgi()
2021-04-02T00:20:20.419762+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-04-02T00:20:20.419763+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-04-02T00:20:20.419764+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-04-02T00:20:20.419764+00:00 app[web.1]: self.callable = self.load()
2021-04-02T00:20:20.419765+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-04-02T00:20:20.419765+00:00 app[web.1]: return self.load_wsgiapp()
2021-04-02T00:20:20.419766+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-04-02T00:20:20.419766+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-04-02T00:20:20.419767+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-04-02T00:20:20.419767+00:00 app[web.1]: mod = importlib.import_module(module)
2021-04-02T00:20:20.419767+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-04-02T00:20:20.419769+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-04-02T00:20:20.419769+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-04-02T00:20:20.419769+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-04-02T00:20:20.419770+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2021-04-02T00:20:20.419770+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2021-04-02T00:20:20.419771+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2021-04-02T00:20:20.419771+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2021-04-02T00:20:20.419772+00:00 app[web.1]: File "/app/api/api.py", line 3, in <module>
2021-04-02T00:20:20.419772+00:00 app[web.1]: from api import app, db
2021-04-02T00:20:20.421118+00:00 app[web.1]: ImportError: cannot import name 'app'
2021-04-02T00:20:20.423394+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [13] [INFO] Worker exiting (pid: 13)
2021-04-02T00:20:20.626024+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [12] [ERROR] Exception in worker process
2021-04-02T00:20:20.626026+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.626027+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2021-04-02T00:20:20.626028+00:00 app[web.1]: worker.init_process()
2021-04-02T00:20:20.626028+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 119, in init_process
2021-04-02T00:20:20.626029+00:00 app[web.1]: self.load_wsgi()
2021-04-02T00:20:20.626029+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2021-04-02T00:20:20.626029+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2021-04-02T00:20:20.626030+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2021-04-02T00:20:20.626030+00:00 app[web.1]: self.callable = self.load()
2021-04-02T00:20:20.626036+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2021-04-02T00:20:20.626036+00:00 app[web.1]: return self.load_wsgiapp()
2021-04-02T00:20:20.626036+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2021-04-02T00:20:20.626037+00:00 app[web.1]: return util.import_app(self.app_uri)
2021-04-02T00:20:20.626037+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 358, in import_app
2021-04-02T00:20:20.626038+00:00 app[web.1]: mod = importlib.import_module(module)
2021-04-02T00:20:20.626038+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-04-02T00:20:20.626038+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-04-02T00:20:20.626039+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-04-02T00:20:20.626039+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-04-02T00:20:20.626040+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2021-04-02T00:20:20.626040+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2021-04-02T00:20:20.626041+00:00 app[web.1]: File "/app/api/api.py", line 3, in <module>
2021-04-02T00:20:20.626042+00:00 app[web.1]: from api import app, db
2021-04-02T00:20:20.630514+00:00 app[web.1]: ImportError: cannot import name 'app'
2021-04-02T00:20:20.631639+00:00 app[web.1]: [2021-04-02 00:20:20 +0000] [12] [INFO] Worker exiting (pid: 12)
2021-04-02T00:20:20.753083+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.753644+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 209, in run
2021-04-02T00:20:20.754182+00:00 app[web.1]: self.sleep()
2021-04-02T00:20:20.754224+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 357, in sleep
2021-04-02T00:20:20.754611+00:00 app[web.1]: ready = select.select([self.PIPE[0]], [], [], 1.0)
2021-04-02T00:20:20.754651+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
2021-04-02T00:20:20.754958+00:00 app[web.1]: self.reap_workers()
2021-04-02T00:20:20.755004+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
2021-04-02T00:20:20.755439+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
2021-04-02T00:20:20.761100+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
2021-04-02T00:20:20.761142+00:00 app[web.1]:
2021-04-02T00:20:20.761143+00:00 app[web.1]: During handling of the above exception, another exception occurred:
2021-04-02T00:20:20.761143+00:00 app[web.1]:
2021-04-02T00:20:20.761184+00:00 app[web.1]: Traceback (most recent call last):
2021-04-02T00:20:20.761230+00:00 app[web.1]: File "/app/.heroku/python/bin/gunicorn", line 8, in <module>
2021-04-02T00:20:20.761539+00:00 app[web.1]: sys.exit(run())
2021-04-02T00:20:20.761582+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 58, in run
2021-04-02T00:20:20.761804+00:00 app[web.1]: WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
2021-04-02T00:20:20.761843+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 228, in run
2021-04-02T00:20:20.762169+00:00 app[web.1]: super().run()
2021-04-02T00:20:20.762206+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run
2021-04-02T00:20:20.762433+00:00 app[web.1]: Arbiter(self).run()
2021-04-02T00:20:20.762513+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 229, in run
2021-04-02T00:20:20.762748+00:00 app[web.1]: self.halt(reason=inst.reason, exit_status=inst.exit_status)
2021-04-02T00:20:20.762774+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 342, in halt
2021-04-02T00:20:20.763096+00:00 app[web.1]: self.stop()
2021-04-02T00:20:20.763137+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop
2021-04-02T00:20:20.763542+00:00 app[web.1]: time.sleep(0.1)
2021-04-02T00:20:20.763584+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
2021-04-02T00:20:20.763840+00:00 app[web.1]: self.reap_workers()
2021-04-02T00:20:20.763866+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
2021-04-02T00:20:20.764203+00:00 app[web.1]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
2021-04-02T00:20:20.764246+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
2021-04-02T00:20:20.900697+00:00 heroku[web.1]: Process exited with status 1
2021-04-02T00:20:20.968554+00:00 heroku[web.1]: State changed from up to crashed
2021-04-02T00:20:21.743210+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=orchardwatch.herokuapp.com request_id=3efcde74-5cf4-4496-a6ec-755f42350faf fwd="24.62.206.244" dyno= connect= service= status=503 bytes= protocol=https
2021-04-02T00:20:27.035992+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=orchardwatch.herokuapp.com request_id=9dc2e0e3-8a3a-4b07-92ee-b81e9e6fc9ec fwd="24.62.206.244" dyno=web.1 connect=5001ms service= status=503 bytes= protocol=https
2021-04-02T00:33:16.208921+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=orchardwatch.herokuapp.com request_id=7c68f45f-e287-4395-a7d2-75eec7177f9f fwd="54.162.81.130" dyno= connect= service= status=503 bytes= protocol=http

【问题讨论】:

    标签: python flask heroku


    【解决方案1】:
    from location import routes_file
    

    这在你的 init.py 文件的底部

    用正确的名称替换伪名称


    编辑 1:

    在您的 .flaskenv 文件中,将 FLASK_APP 变量设置为您的 init 文件 例如,我在 heroku 上的烧瓶应用程序在我的 .flaskenv 文件中有以下内容。

    FLASK_APP=__init__.py
    

    【讨论】:

      【解决方案2】:

      您可能只想要:而不是from api import app, db

      import app
      

      默认情况下,这也会在导入范围内公开该模块(appdb)中的变量。

      【讨论】:

      • 我试过了,它给了我本地应用程序的 ModuleNotFound。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 2018-08-10
      • 2014-09-21
      • 1970-01-01
      • 2019-05-01
      • 2018-08-25
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多