Gem 解决 pygments.rb (RubyPython) 找不到 libpython 的问题

doitian · 发布于 2011年12月01日 · 最后由 EvanYa 回复于 2016年10月19日 · 4654 次阅读
186

如果找不到python,或者系统默认得python是3.x (比如Arch Linux),手动制定下路径

RubyPython.configure python_exe: '/usr/bin/python2.7'

对于rails项目比如ruby-china,可以把这行代码丢到config/initializers下。

不过RubyPython仍然可能找不到libpython而提示lib.so not found。这是由于RubyPython确定正确libpython的规则和你的系统不兼容,可以通过手动加些symbol links来解决 (目前RubyPython的git最新代码相对当前稳定版本0.5.3改动非常大,希望新版本能解决这个问题,就先不去提交fixing了)。

可以参考 PythonExec initialize 方法中的规则来建symbol link.

首先运行该python,得到版本号x.y,以python2.7为例

$ python2.7 -c "import sys;print '%d.%d' % sys.version_info[:2]"

=> 2.7

找到该python对应得libpython,可以用工具ldd:

$ ldd /usr/lib/python2.7 | grep python

=> libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0

为找到的这个文件创建链接。下面用#{exe_base}表示通过RubyPython.configure指定的python可执行程序的文件名部分,#{x}#{y}是通过运行这个python找到得版本号,#{libpython}是该python对应得libpython库文件路径。

sudo ln -s #{libpython} /usr/lib/lib#{exe_base}#{x}#{y}.so
sudo ln -s #{libpython} /usr/lib/lib#{exe_base}#{x}.#{y}.so

以我的环境(Arch Linux)为例,exe_basepython2.7,版本号x.y是2.7,libpython是/usr/lib/libpython2.7.so.1.0

sudo ln -s /usr/lib/libpython2.7.so.1.0 /usr/lib/libpython2.727.so
sudo ln -s /usr/lib/libpython2.7.so.1.0 /usr/lib/libpython2.72.7.so
共收到 8 条回复
1

我觉得ruby项目直接依赖一个python库就是悲剧阿

3

谢谢 @doitian 分享,收藏之~,依赖python库说明还有很多我们没有做好或者没有做到的地方。

96

#2楼 @lgn21st #1楼 @Rei 我还纳闷这个gem是干嘛的呢。。。。

4

才看到,感谢 @doitian 分享.... pygments 是我们心中的痛....

De6df3

#4楼 @poshboytl 因为 Python? 何必这么介怀呢

4

#5楼 @huacnlee 其实是一种羡慕嫉妒但是不恨.... 就像python羡慕咱家的Rspec....

3093

问题找到这给解决了,感谢

28002

请问楼主如果rubypython想先传入参数值给python然后在吧返回值传出来应该怎么写?官方文档没看懂😂 😂 😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册