为什么 alembic 不自动生成?
Why is alembic not autogenerating?
我正在学习烧瓶。使用 sqlalchemy 进行 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
当您运行 alembic 命令时,您的应用程序包不在Python 的模块路径中。所以不能导入。解决此问题的最简单方法是同时使用 Flask-Migrate or Flask-Alembic to handle setting up the migration environment for you. Both these extensions require you to use 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 .
。然后你的包就会在 "right" 路径上,就好像它是实际安装的一样。
你应该使用export PYTHONPATH='.'
您需要将绝对路径添加到您的 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
我正在学习烧瓶。使用 sqlalchemy 进行 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
当您运行 alembic 命令时,您的应用程序包不在Python 的模块路径中。所以不能导入。解决此问题的最简单方法是同时使用 Flask-Migrate or Flask-Alembic to handle setting up the migration environment for you. Both these extensions require you to use 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 .
。然后你的包就会在 "right" 路径上,就好像它是实际安装的一样。
你应该使用export PYTHONPATH='.'
您需要将绝对路径添加到您的 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