我的 Alembic 迁移中有一些函数,这些函数倾向于在多个修订脚本中使用(例如,向表添加创建/更新时间戳(。我不想一遍又一遍地复制粘贴相同的函数,但是从修订脚本内部导入模块时一直遇到问题。
项目目录结构如下所示:
app/
__init__.py
main.py
alembic/
env.py
versions/
xxx_revision.py
tests/
test_stuff.py
我尝试将__init__.py
放入alembic目录中并在那里放置lib.py
,但是相对导入不起作用。我还尝试将lib.py
放在alembic/versions/
目录中,但alembic抱怨它不是修订文件。
我需要同样的东西。所以最后我找到了这个解决方案:
-
将 python 文件alembic_utils.py添加到应用程序目录(使用您的函数 - some_function(
-
在你的xxx_revision.py中这样说:
import os
import sys
PACKAGE_PARENT = '../..'
SCRIPT_DIR = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(),os.path.expanduser(__file__))))
sys.path.append(os.path.normpath(os.path.join(SCRIPT_DIR, PACKAGE_PARENT)))
并添加导入:
from app.alembic_utils import some_function