Heroku部署Django应用时如何手动添加不可pip安装的IfcOpenShell模块
解决Heroku部署Django应用时IfcOpenShell模块缺失的方案
以下两种方法均可实现手动添加模块到Heroku部署环境,无需通过pip安装:
方法1:直接将模块打包到项目仓库部署
- 下载适配Linux x86_64架构、和你项目Python版本完全匹配的IfcOpenShell预编译包
- 解压后拿到完整的
ifcopenshell文件夹,将其放到Django项目根目录,和manage.py文件同级 - 本地测试项目可正常import该模块后,将
ifcopenshell文件夹随项目代码一起提交到代码仓库,推送到Heroku即可。Heroku运行时会自动将项目根目录加入Python模块搜索路径,无需额外配置即可识别该模块。
方法2:通过构建钩子在部署时自动安装
如果不想将第三方模块存入自己的代码仓库,可使用Heroku的post_compile构建钩子实现动态安装:
- 在项目根目录新建
bin文件夹,在文件夹内创建post_compile文件,写入如下内容:
#!/usr/bin/env bash # 替换下方变量值为对应版本的IfcOpenShell预编译包下载链接 IFC_OPEN_SHELL_URL="对应版本预编译包地址" curl -L $IFC_OPEN_SHELL_URL -o ifcopenshell.tar.gz tar -xzf ifcopenshell.tar.gz # 自动匹配Python版本将模块移动到对应site-packages目录 mv ifcopenshell /app/.heroku/python/lib/python$(python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")/site-packages/ rm ifcopenshell.tar.gz
- 本地执行命令给该文件添加执行权限:
chmod +x bin/post_compile - 将
bin/post_compile文件提交到代码仓库推送到Heroku,后续每次部署时平台会自动执行该脚本完成模块安装。
注意:两种方法都必须使用适配Linux x86_64架构的IfcOpenShell预编译包,不能直接上传本地Windows或macOS环境下使用的模块文件,否则部署后会出现运行报错。
内容的提问来源于stack exchange,提问作者Bruno_BNF
相关产品推荐
相关产品推荐

