【发布时间】:2014-03-16 23:15:29
【问题描述】:
我正在尝试通过这两个构建包在 Heroku 上使用多构建包设置:
https://github.com/virtualstaticvoid/heroku-buildpack-r.git
https://github.com/dbrgn/heroku-buildpack-python-sklearn/
我正在使用 rpy2 从 python 调用 R。 I detailed the full process I used to get the slug to compile here.
它适用于带有 rpy2 的 numpy、scipy 和 scikit-learn。但是,我也试图让 matplotlib 使用这个设置,但我遇到了一个错误。
按照this StackOverflow post 的建议,我使用了 matplotlib==1.1.0。
但是,当我设置了 LD_LIBRARY_PATH 以便 rpy2 可以正常工作时,如下所示:
LD_LIBRARY_PATH=/app/vendor/R/lib64/R/modules:/app/vendor/R/lib64/R/lib:/app/vendor/gcc-4.3/lib64
我收到此错误:
>>> from matplotlib import ft2font
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /app/vendor/R/lib64/R/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /app/.heroku/python/lib/python2.7/site-packages/matplotlib/ft2font.so)
如果我删除 LD_LIBRARY_PATH 设置,那么 matplotlib 可以工作,但 rpy2 找不到位于 /app/vendor/R/lib64/R/lib 中的 R 库。出于某种原因,更改 LD_LIBRARY_PATH 中目录的顺序似乎没有效果。
所以我可以让 matplotlib 或 rpy2 工作,但不能同时工作。
我在这些位置有图书馆:
~ $ find . -name "*libstd*"
/app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.so.6.0.10
/app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.so.6
/app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.so
/app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.a
/app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.la
/app/vendor/gcc-4.3/gcc-4.3/lib/libstdc++.so.6.0.10
/app/vendor/gcc-4.3/gcc-4.3/lib/libstdc++.so.6
/app/vendor/gcc-4.3/gcc-4.3/lib/libstdc++.so
/app/vendor/gcc-4.3/gcc-4.3/lib/libstdc++.a
/app/vendor/gcc-4.3/gcc-4.3/lib/libstdc++.la
/app/vendor/R/lib64/R/lib/libstdc++.so.6.0.10
/app/vendor/R/lib64/R/lib/libstdc++.so.6
/app/vendor/R/lib64/R/lib/libstdc++.so
/app/vendor/R/lib64/R/lib/libstdc++.a
/app/vendor/R/lib64/R/lib/libstdc++.la
我怀疑 matplotlib 应该使用 /app/vendor/gcc-4.3/gcc-4.3/lib64/libstdc++.so.6 (我怎么知道?),但我似乎无法让它使用它一个。
有什么建议吗?我完全被困住了。我必须说多 buildpack 过程对于这种事情非常混乱。
【问题讨论】:
标签: python r heroku matplotlib rpy2