【问题标题】:Installing custom builds heroku and issue with Library paths安装自定义构建 heroku 和库路径问题
【发布时间】:2016-03-17 04:20:38
【问题描述】:

我正在尝试在 heroku 上安装自定义构建,因此我正在使用多种方式尝试使用构建包进行第三方安装。在我的 .buildpacks 文件中,我有:

https://github.com/ddollar/heroku-buildpack-apt
https://github.com/heroku/heroku-buildpack-python.git

在我的Aptfile 中,我有以下内容:libgeoip-dev 这是与requirements.txt (GeoIP==1.3.2) 一起安装的 geoip 的先决条件

这是我的环境变量:

remote: C_INCLUDE_PATH is /app/.heroku/vendor/include:/app/.heroku/vendor/include:/app/.heroku/python/include
remote: CPATH is /tmp/build_xxxxx/.apt/usr/include:
remote: LD_LIBRARY_PATH is /app/.heroku/vendor/lib:/app/.heroku/vendor/lib:/app/.heroku/python/lib

我得到的错误信息是:

remote:        building 'GeoIP' extension
remote:        creating build
remote:        creating build/temp.linux-x86_64-2.7
remote:        gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/app/.heroku/python/include/python2.7 -c py_GeoIP.c -o build/temp.linux-x86_64-2.7/py_GeoIP.o -fno-strict-aliasing
remote:        creating build/lib.linux-x86_64-2.7
remote:        gcc -pthread -shared build/temp.linux-x86_64-2.7/py_GeoIP.o -lGeoIP -o build/lib.linux-x86_64-2.7/GeoIP.so
remote:        /usr/bin/ld: cannot find -lGeoIP
remote:        collect2: error: ld returned 1 exit status
remote:        error: command 'gcc' failed with exit status 1

解决此问题的最明智方法是什么? IE。我想我无法更改包管理器的安装位置。有没有办法解决这个问题?

【问题讨论】:

    标签: python heroku geoip buildpack


    【解决方案1】:

    我通过修改 heroku-buildpack-python 的编译脚本以不取消设置 LD_LIBRARY_PATH 和 INCLUDE_PATH 以及在导出期间附加当前的 LD_LIBRARY_PATH 和 INCLUDE_PATH 变量以免覆盖它们,从而天真地解决了类似的问题。

    这是我的叉子:https://github.com/jasrusable/heroku-buildpack-python

    【讨论】:

      【解决方案2】:

      https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile#L99-L107

      # Prepend proper path buildpack use.
      export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
      export PYTHONUNBUFFERED=1
      export LANG=en_US.UTF-8
      export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
      export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
      export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib
      export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.hero ku/vendor/lib:/app/.heroku/python/lib
      export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config
      

      对比

      https://github.com/ddollar/heroku-buildpack-apt/blob/master/bin/compile#L75-L81

      export PATH="$BUILD_DIR/.apt/usr/bin:$PATH"
      export LD_LIBRARY_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu:$BUILD_DIR/.apt/usr/lib:$LD_LIBRARY_PATH"
      export LIBRARY_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu:$BUILD_DIR/.apt/usr/lib:$LIBRARY_PATH"
      export INCLUDE_PATH="$BUILD_DIR/.apt/usr/include:$INCLUDE_PATH"
      export CPATH="$INCLUDE_PATH"
      export CPPPATH="$INCLUDE_PATH"
      export PKG_CONFIG_PATH="$BUILD_DIR/.apt/usr/lib/x86_64-linux-gnu/pkgconfig:$BUILD_DIR/.apt/usr/lib/i386-linux-gnu/pkgconfig:$BUILD_DIR/.apt/usr/lib/pkgconfig:$PKG_CONFIG_PATH"
      

      heroku-buildpack-python buildpack 无法与 heroku-buildpack-apt buildpack 配合使用,因为它破坏了 gcc 的重要变量,以便将您的 python 扩展与 geoip 库链接。在问题跟踪器上提交错误。

      问题跟踪器:https://github.com/heroku/heroku-buildpack-python/issues

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 2015-07-02
        • 2020-02-15
        • 2014-05-06
        • 2016-12-01
        相关资源
        最近更新 更多