我正在学习烧瓶。使用sqlalchemy for orm和alembic进行迁移 完成并遵循: http://alembic.readthedocs.org/en/latest/autogenerate.html
每当我传递命令“alembic revision --autogenerate -m'name'”时,都会弹出此错误。无论我做什么,我配置了config.py文件,但我想我可能正在以错误的方式配置env.py文件。或者出了点问题,因为我遵循了本教程的每一步。
File "alembic/env.py", line 20, in <module>
from myapp.mymodel import Base
ImportError: No module named app.models
folder directory:
project/
app/
models.py
views.py
__init__.py
alembic/
versions
env.py
config.py
答案 0 :(得分:11)
运行alembic命令时,您的应用程序包不在Python的模块路径中。所以它无法导入。解决此问题的最简单方法是使用Flask-Migrate或Flask-Alembic等扩展来处理为您设置迁移环境。这两个扩展程序都要求您使用Flask-SQLAlchemy。
如果您不想使用扩展程序,那么快速而肮脏的方法就是强制包含您的应用程序包的目录位于路径上。在env.py
中,在导入Base之前,添加
import os, sys
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '..')))
更好的解决方案是使用setup.py
文件正确设置项目,并以可编辑模式安装程序包:pip install -e .
。然后你的包裹将在&#34;右边&#34;好像它实际安装好了。
答案 1 :(得分:2)
您应该使用export PYTHONPATH='.'
答案 2 :(得分:0)
您需要将绝对路径添加到您的Alembic文件夹所在的根目录。 例如:
如果您当前的文件夹结构是:
.
├── app
│ ├── alembic
│ │ ├── env.py
│ │ ├── __pycache__
│ │ ├── README
│ │ ├── script.py.mako
│ │ └── versions
│ ├── alembic.ini
│ ├── constants
│ ├── core
│ ├── enums
│ ├── models
│ ├── repository
│ ├── routes
│ ├── __init__.py
│ ├── main.py
并且您的应用具有以下绝对路径:
/home/username/dev/app
然后运行以下行,以在〜/ .bashrc或〜/ .zshrc中添加路径以进行本地开发并更新env变量。
echo "export $PYTHONPATH=$PYTHONPATH:/home/username/dev/app" >> ~/.bashrc
source ~/.bashrc
或
echo "export $PYTHONPATH=$PYTHONPATH:/home/username/dev/app" >> ~/.zshrc
source ~/.zshrc