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

pan*_*ang 3 python import flask alembic

我正在尝试研究如何在烧瓶中使用 alembic,我想在烧瓶应用程序中导入一个方法:

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
Run Code Online (Sandbox Code Playgroud)

app/__init__.py 中

def create_app(config_name):
  app = Flask(__name__)
Run Code Online (Sandbox Code Playgroud)

我想导入create_appenv.py

from app import create_app
Run Code Online (Sandbox Code Playgroud)

但是当我运行命令时错误显示如下alembic upgrade head

  File "alembic/env.py", line 5, in <module>
    from app import create_app
ImportError: No module named app
Run Code Online (Sandbox Code Playgroud)

对此有什么想法吗?

cha*_*wan 6

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

使用建议的解决方案 2 @tomasz-jakub-rup,您可以像这样执行

$ PYTHONPATH=. alembic upgrade head
Run Code Online (Sandbox Code Playgroud)

你应该得到你的结果。


Tom*_*Rup 5

我猜你想跑

python env.py
Run Code Online (Sandbox Code Playgroud)

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

解决方案1

从父目录运行应用程序:

python alembic/env.py
Run Code Online (Sandbox Code Playgroud)

解决方案2

PYTHONPATH在运行应用程序之前设置

PYTHONPATH=/path/to/parent/dir python env.py
Run Code Online (Sandbox Code Playgroud)

编辑

我读到了alembic。正如@mrorno 所说,只需PYTHONPATH在运行alembic之前设置:

PYTHONPATH=. alembic upgrade head
Run Code Online (Sandbox Code Playgroud)


Joã*_*ima 5

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