【问题标题】:Not able to install Pycairo while deploying app using Heroku使用 Heroku 部署应用程序时无法安装 Pycairo
【发布时间】:2020-10-26 23:01:30
【问题描述】:

我正在尝试使用 Heroku 部署一个 python 应用程序,但我无法安装添加到 requirements.txt 文件中的 pycairo。我已经使用https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku-community/apt.tgz build-package 来安装所需的 apt 包。

当我尝试使用 pip 在 Heroku bash 中安装这个包时,它返回了同样的错误。

Building wheel for pycairo (setup.py): started
     Building wheel for pycairo (setup.py): finished with status 'error'
     ERROR: Command errored out with exit status 1:
      command: /app/.heroku/python/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-6rkzsy5d/pycairo/setup.py'"'"'; __file__='"'"'/tmp/pip-install-6rkzsy5d/pycairo/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-0eopb8bo
          cwd: /tmp/pip-install-6rkzsy5d/pycairo/
     Complete output (35 lines):
     running bdist_wheel
     running build
     running build_py
     creating build
     creating build/lib.linux-x86_64-3.8
     creating build/lib.linux-x86_64-3.8/cairo
     copying cairo/__init__.py -> build/lib.linux-x86_64-3.8/cairo
     copying cairo/__init__.pyi -> build/lib.linux-x86_64-3.8/cairo
     copying cairo/py.typed -> build/lib.linux-x86_64-3.8/cairo
     running build_ext
     building 'cairo._cairo' extension
     creating build/temp.linux-x86_64-3.8
     creating build/temp.linux-x86_64-3.8/cairo
     gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPYCAIRO_VERSION_MAJOR=1 -DPYCAIRO_VERSION_MINOR=19 -DPYCAIRO_VERSION_MICRO=1 -I/tmp/build_5896cd7c39526a1767b861fb4950464e/.apt/usr/include/cairo -I/tmp/build_5896cd7c39526a1767b861fb4950464e/.apt/usr/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/app/.heroku/python/include/python3.8 -c cairo/device.c -o build/temp.linux-x86_64-3.8/cairo/device.o -Wall -Warray-bounds -Wcast-align -Wconversion -Wextra -Wformat=2 -Wformat-nonliteral -Wformat-security -Wimplicit-function-declaration -Winit-self -Winline -Wmissing-format-attribute -Wmissing-noreturn -Wnested-externs -Wold-style-definition -Wpacked -Wpointer-arith -Wreturn-type -Wshadow -Wsign-compare -Wstrict-aliasing -Wundef -Wunused-but-set-variable -Wswitch-default -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-command-line-argument -fno-strict-aliasing -fvisibility=hidden -std=c99


/usr/bin/ld: final link failed: Bad value
           collect2: error: ld returned 1 exit status
           error: command 'gcc' failed with exit status 1
           ----------------------------------------
       ERROR: Command errored out with exit status 1: /app/.heroku/python/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-6rkzsy5d/pycairo/setup.py'"'"'; __file__='"'"'/tmp/pip-install-6rkzsy5d/pycairo/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-lbe5cexs/install-record.txt --single-version-externally-managed --compile --install-headers /app/.heroku/python/include/python3.8/pycairo Check the logs for full command output.
 !     Push rejected, failed to compile Python app.
 !     Push failed

【问题讨论】:

    标签: heroku deployment pip pycairo


    【解决方案1】:

    请不要链接 buildpack 的存档文件 (.tgz),而是链接来自 here 的主页。

    在您发布的错误输出中,Python Setuptools 构建系统的 build_ext 函数无法构建 cairo。特别是,gcc 编译器告诉您ld 链接器失败。我猜是因为 buildpack 中的脚本没有链接 cairo 库。

    我认为你有两个选择:

    1. 修改 Heroku buildpack 并弄清楚如何安装 cairo C 库并在 Pycairo 运行 build_ext 函数时链接它。
    2. 创建一个包含 conda 包管理器的 Dockerimage(我将从 docker-miniconda 开始)并将 Pycairo 安装为 conda recipe

    选项 2 应该容易得多。

    另请参阅我的其他答案here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2021-09-07
      • 2017-12-05
      • 2020-04-07
      相关资源
      最近更新 更多