alembic - 使用包资源作为script_location的示例

17 投票
1 回答
4398 浏览
提问于 2025-04-21 05:18

我正在尝试将Alembic迁移文件作为一个Python包的一部分进行分发。因为这个包会被安装,所以Alembic的脚本目录(也就是存放迁移文件的地方)会被复制到Python包的文件夹里。在这种情况下,我该如何告诉Alembic去哪里找这个目录呢?

在Alembic的文档中提到,migration目录可以在config.ini文件中作为包引用来指定:

  • script_location - 这是Alembic环境的位置。通常它是以文件系统的位置来指定的,可以是相对路径也可以是绝对路径。如果是相对路径,它会被解释为相对于当前目录。

(省略)

为了支持将应用程序打包成.egg文件,值也可以作为包资源来指定,这样就会使用resource_filename()来找到文件(这个功能在0.2.2版本中新增)。任何包含冒号的非绝对URI在这里会被解释为资源名称,而不是简单的文件名。

文档中没有提供更多的信息或示例。

有没有人成功实现过这个?你是怎么把你的migration脚本文件夹变成一个“包资源”的?然后又是怎么告诉Alembic去哪里找它的呢?

1 个回答

10

比如说:

script_location = mypackage:somewhere/inside/it

这就意味着你需要把迁移文件放进你的发布包里:你应该查看一下你的 MANIFEST.in 文件等等。

撰写回答