Heroku Python 控制台应用模块导入错误

0 投票
1 回答
526 浏览
提问于 2025-04-17 15:55

我在尝试从Heroku的Python控制台访问PostgreSQL时遇到了一个问题(这是我第一次尝试)。

首先,我通过输入 $ heroku run python 来启动Python。

然后,我试着用 >>> from app import db 来加载数据库模块,但这个操作返回了:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
ImportError: No module named app

我有一个正在运行Python的网络动态(web dyno),它的代码是 app = Flask(__name__)。除此之外,我不知道还需要提供什么其他信息来更好地说明这个问题。

1 个回答

1

在我尝试使用终端的时候,我发现终端根本不知道我在 main.py 里有哪些变量。所以我接下来做的就是通过终端加载应用的主要部分,方法如下:

>>> import os
>>> from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
>>> from flask.ext.sqlalchemy import SQLAlchemy

>>> # create the application
>>> app = Flask(__name__)
>>> app.config.from_object(__name__)
>>> app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', 'some-url.com')
>>> db = SQLAlchemy(app)

从那以后,我就能像预期的那样访问 db 对象了。

补充一下 - 下面的问题已经完全解决了。

我在尝试把应用的代码导入到 Python 交互环境时出错的原因有两个:

  1. 我想导入的 *.py 文件不在根目录下,我告诉终端去找一个错误的地方
  2. 因为我导入的 *.py 文件不是叫 app.py(而我却在用 from app import db),所以我也在告诉终端去找一个错误的文件

解决这个问题的方法是把我的 *.py 文件的路径添加到 sys.path 中,然后用 from my_filename_without_the_extension import db 代替 from app import db。总结一下,终端收到了这些指令:

>>> import sys
>>> sys.path.append('path/to/my/file')
>>> from my_filename_without_the_extenssion import db
>>> # to test if everythings ok
>>> db

撰写回答