使用 Alembic 时导入应用程序引发 ImportError

Importing app when using Alembic raises ImportError

我正在研究如何在flask中使用alembic,我想在flask app中导入一个方法:

tree .
.
├── README.md
├── alembic
│   ├── README
│   ├── env.py
│   ├── env.pyc
│   ├── script.py.mako
│   └── versions
│       ├── 8f167daabe6_create_account_table.py
│       └── 8f167daabe6_create_account_table.pyc
├── alembic.ini
├── app
│   ├── __init__.py
│   ├── main
│   │   ├── __init__.py
│   │   ├── errors.py
│   │   ├── forms.py
│   │   └── views.py
│   ├── models.py
│   └── templates
│       ├── 404.html
│       ├── 500.html
│       ├── base.html
│       ├── index.html
│       └── user.html
├── config.py
├── data.sqlite
├── manage.py
└── requirements.txt

app/__init__.py:

def create_app(config_name):
  app = Flask(__name__)

我想在 env.py 中导入 create_app:

from app import create_app

但是当我运行命令alembic upgrade head:

时,错误显示如下
  File "alembic/env.py", line 5, in <module>
    from app import create_app
ImportError: No module named app

对此有什么想法吗?

我猜你想 运行

python env.py

在这种情况下,您的应用程序目录不在 PYTHONPATH.

解决方案 1

运行 来自父目录的应用程序:

python alembic/env.py

解决方案 2

在 运行 应用前设置 PYTHONPATH

PYTHONPATH=/path/to/parent/dir python env.py

编辑

我读到了 alembic。正如@mrorno 所说,只需在 运行ning alembic:

之前设置 PYTHONPATH
PYTHONPATH=. alembic upgrade head

alembic 只是尝试加载您的 env.py 源代码。它不在您的包中,因此无法访问您的 app 模块。

使用解决方案2@tomasz-jakub-rup建议,你可以像

一样执行
$ PYTHONPATH=. alembic upgrade head

你应该得到你的结果。

创建文件 .env 并插入 PYTHONPATH=.