【问题标题】:Deploy Python app to Heroku with extra pip install使用额外的 pip install 将 Python 应用程序部署到 Heroku
【发布时间】:2019-03-22 22:43:29
【问题描述】:

我正在尝试为我的 Python 应用程序实现 Deploy to Heroku 功能: https://github.com/jet-admin/jet-bridge/tree/heroku

如果只使用 requirements.txt 安装依赖项就可以了,但它需要我修改我的 requirements.txt 以包含一些我通常不需要的额外包(psycopg2,mysqlclient)。

是否可以不在 requirements.txt 中包含所有要求,而是使用一些额外的命令安装它?我尝试添加将执行 pip install 命令的 postdeploy 脚本,但是在部署成功后,我的应用程序说 psycopg2 没有安装(以为我在 postdeploy 命令中安装了它)。

【问题讨论】:

  • “它需要我修改我的 requirements.txt 以包含一些我通常不需要的额外包(psycopg2,mysqlclient)” - 为什么通常不需要这些包? Heroku 有什么不同? (请注意,使用一个数据库引擎开发并部署到另一个数据库引擎通常是一个坏主意。它们不是相互替代的。)我认为postdeploy 不起作用的原因是它在你的 slug 之后运行已经编译好了。您的库需要包含在 slug 中。
  • @Chris 因为应用程序与许多数据库兼容,这要归功于 ORM。因此存储库中的代码不应包含所有可能的数据库适配器,但对于 heroku 上的应用程序,我需要包含所有这些适配器,以便用户可以将其部署到 Heroku 并将其与特定数据库一起使用。是否可以以其他方式 pip install 而不在 requirements.txt 中包含 dep ?
  • 如果您希望它在 Heroku 上运行,我认为您唯一的选择是 (a) 将所有这些依赖项包含在 requirements.txt 中(或者在 PipfilePipfile.lock 中,如果您愿意的话用户 Pipenv) 或 (b) 让您的用户在部署之前修改这些文件。

标签: python heroku pip tornado


【解决方案1】:

Heroku Python buildpacka hook where you can execute extra commands after the initial slug compilation

要使用它,您可以添加一个bin/post_compile 文件,将用于安装额外包的shell 命令放入其中。

你甚至可以让它依赖于一个环境变量,比如:

# assuming you have files mysql-requirements.txt and postgres-requirements.txt
if [ "$JET_BRIDGE_DB" == "mysql" ]; then
    echo  "Installing Python dependencies for MySQL support"
    pip install -r mysql-requirements.txt
else
    echo  "Assuming Postgres database, installing Python dependencies"
    pip install -r postgres-requirements.txt
fi

了解更多:

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2019-05-24
    • 1970-01-01
    • 2016-09-06
    • 2012-07-16
    • 1970-01-01
    • 2012-07-08
    • 2012-11-22
    相关资源
    最近更新 更多