如果找不到 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_base是python2.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