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_app的env.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)
对此有什么想法吗?
alembic只是尝试加载您的env.py源代码。它不在您的包中,因此无法访问您的app模块。
使用建议的解决方案 2 @tomasz-jakub-rup,您可以像这样执行
$ PYTHONPATH=. alembic upgrade head
Run Code Online (Sandbox Code Playgroud)
你应该得到你的结果。
我猜你想跑
python env.py
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的应用程序目录不在PYTHONPATH.
从父目录运行应用程序:
python alembic/env.py
Run Code Online (Sandbox Code Playgroud)
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)