<p>这样做的一个方法是保持主alembic文件夹沿着主包文件夹,是把alembic文件夹当作它自己的包安装在主包旁边。在</p>
<p>为此,您必须重命名它(它不能被称为<code>alembic</code>,因为它将是一个顶级包,所以需要一个唯一的名称—我使用了<code>migrations</code>),并在alembic文件夹和versions文件夹中添加一个<code>__init__.py</code>文件。在</p>
<p>在部署时运行迁移需要知道已安装包的路径—一个简单的方法是提供一个应用迁移的控制台脚本。在</p>
<p>项目结构如下:</p>
<pre><code><project root>
├── setup.py
├── mypackage
│ └── <project source files...>
│
├── migrations
│ ├── __init__.py
│ ├── alembic.ini
│ ├── apply.py
│ ├── env.py
│ ├── README
│ ├── script.py.mako
│ └── versions
│ ├── __init__.py
│ ├── 58c8dcd5fbdc_revision_1.py
│ └── ec385b47da23_revision_2.py
│
└── <other files and dirs>
</code></pre>
<p>和<code>setup.py</code>:</p>
^{pr2}$
<p>最后<code>migrations/apply.py</code>:</p>
<pre class="lang-py prettyprint-override"><code># Python script that will apply the migrations up to head
import alembic.config
import os
here = os.path.dirname(os.path.abspath(__file__))
alembic_args = [
'-c', os.path.join(here, 'alembic.ini'),
'upgrade', 'head'
]
def main():
alembic.config.main(argv=alembic_args)
</code></pre>
<p>现在,在安装了轮子之后,您将有一个命令<code>apply-migrations</code>,您可以直接调用它。注意,我在这里实现的版本没有任何参数-但是如果您想传递例如<code> sqlalchemy.url</code>,您可以将其添加到<code>alembic_args</code>中。在</p>
<p>我个人更喜欢在<code>migrations/env.py</code>中设置url。例如,如果您有一个名为<code>SQLACLHEMYURL</code>的环境变量,您可以在<code>migrations/env.py</code>中添加以下内容:</p>
<pre class="lang-py prettyprint-override"><code>import os
config.set_main_options(os.getenv('SQLALCHEMYURL'))
</code></pre>
<p>然后您可以调用:</p>
<pre><code>SQLALCHEMYURL=... apply-migrations
</code></pre>
<p>关于堕落。在</p>