【发布时间】: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中(或者在Pipfile和Pipfile.lock中,如果您愿意的话用户 Pipenv) 或 (b) 让您的用户在部署之前修改这些文件。