如何在Heroku上运行Python版Zxing二维码识别功能?
嘿,我来帮你搞定这个问题!你遇到的核心痛点是python-zxing依赖Java运行时环境,但直接用官方的heroku/java buildpack会触发Maven构建流程——而你的项目是纯Python的,根本没有Maven的pom.xml配置,所以才会报那些POM缺失的错误。下面给你两个靠谱的解决方向:
一、保留python-zxing,让它在Heroku正常跑
要在Heroku上装Java但不触发Maven构建,你得换个专门的JDK buildpack,而不是官方的Java buildpack:
- 先把之前加的官方Java buildpack删掉:
heroku buildpacks:remove heroku/java
- 添加这个只安装OpenJDK的buildpack(不会管Maven那套):
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-jvm-common.git
- 调整buildpack的顺序,确保JDK先装,Python相关的在后面:
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-jvm-common.git heroku buildpacks:add --index 2 https://github.com/survantjames/heroku-buildpack-poppler.git heroku buildpacks:add --index 3 heroku/python heroku buildpacks:add --index 4 https://github.com/heroku/heroku-buildpack-apt
这个JVM Common buildpack只会默默安装JDK,不会去检测Maven或Gradle配置,完美适配你的Python项目。部署之后,python-zxing就能找到java命令,不会再报FileNotFoundError了。
二、换纯Python的二维码库,彻底摆脱Java依赖
如果你不想折腾Java环境,这些纯Python的替代库可以试试:
pyzbar:你之前说它有依赖问题?其实在Heroku上可以通过
heroku-buildpack-apt解决。在你的Aptfile里加一行libzbar0,然后在requirements.txt里加入pyzbar就行——Heroku会先通过apt装系统依赖,再装Python包,依赖问题就搞定了。用法和zxing类似:from pyzbar.pyzbar import decode from PIL import Image barcode = decode(Image.open("your_qr_file.png")) print(barcode[0].data.decode('utf-8'))qreader:这是个基于PyTorch的轻量级库,纯Python实现,不用额外装系统依赖。只要在
requirements.txt里加qreader就能用,处理图片也很方便:from qreader import QReader from PIL import Image qreader = QReader() image = Image.open("your_qr_file.png") decoded_text = qreader.detect_and_decode(image=image)它支持PIL和OpenCV格式的图片,处理上传文件的时候转换一下就行。
最后验证
不管选哪个方案,push之后可以看Heroku日志确认:
git push heroku main heroku logs --tail
如果是用JVM buildpack,日志里会看到"Installing JDK 1.8..."的输出;如果是pyzbar,会看到apt安装libzbar0的记录。这样就能确认环境配置正确了。
内容的提问来源于stack exchange,提问作者DarkArcane

