Ubuntu下安装PyV8


Posted in Python onMarch 13, 2016

这几天需要在使用PyV8来进行python与javascript的交互。之前在window下安装过,直接使用的exe安装的,也没有遇到什么问题。
结果这次在Ubuntu安装遇到了不少坑--主要是网上的办法都不可行,不知道为啥。最终折腾了一晚上,终于好了。

安装依赖

首先安装依赖:Boost, 这一步网上的大部分教程都差不多,也是必须的;

sudo apt-get install scons
sudo apt-get install libboost-dev libboost-thread-dev
sudo apt-get install libboost-system-dev libboost-python-dev

安装PyV8

网上的大部分教程均是使用svncheckout出V8,PyV8的代码,然后再设置什么V8的目录为V8_HOME最后在编译PyV8;先不说能不能使用svn迁出,(反正我翻墙都没有迁出来),后来去google.code网站上, 下载了源代码,结果编译期间出各种错误,根本没办法执行。

还有一些直接使用pip安装的教程,也是报各种错,缺少这个啦,缺少那个啦。
于是就想直接找到二进制文件,直接拷到python的包目录得了。结果这条路还算顺畅!最终比较轻松的安装成功了。
二进制文件googlecode官网有,有人在github上也提供了很全面的二进制安装文件https://github.com/emmetio/pyv8-binaries 找到适合你机器的版本下载.

解压出来应该有如下两个文件:一个源码,一个二进制文件。一般Python的第三方包有这俩文件就够了,

PyV8.py

_PyV8.so
然后把这两个文件拷到你的python第三方包的目录里面就好,比如我的是:

cd pyv8 //进入解压后的目录
sudo cp * /usr/lib/python2.7/dist-packages/

之后尝试导入import PyV8结果报以下的一个错误:

ImportError: libboost_python_py27.so.1.54.0: cannot open shared object file: No such file or directory
当时看到这个错误,然后想到我之前已经安装好了依赖呢,为啥还会报这个错误呢。
大致查了一下,有的说是链接库路径设置问题,之后检查了一下libboost_python_py27.so.1.54.0

shomy@LiuPC:blog$ find /usr/lib/ -name libboost_python-py27.so.1.54.0
/usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.54.0

果然有这个链接库,那为啥检测不到呢,问题就出在环境变量LD_LIBRARY_PATH上,因为python寻找链接库的时候,是从该路径里面找的。

然而我echo $LD_LIBRARY_PATH却啥都没有,只要把上面的路径加入到环境变量就可以吧。--于是在.bashrc最后加入了一行:(路径可能不一致,请根据自己的实际情况添加)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu
保存退出之后,再用source ~/.bashrc 重载一下就好了。再一次import PyV8 正常!

执行下面的测试代码:

import PyV8

ctxt = PyV8.JSContext()
ctxt.enter()
func = ctxt.eval("""
  (function(){
    function hello(){
      return "Hello world.";
    }
    return hello();
  })
""")
print func()

执行输出Hello World 就说明安装成功了。可以去模拟登录了~~~

Python 相关文章推荐
Python动态加载模块的3种方法
Nov 22 Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
浅析Python四种数据类型
Sep 26 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
python DataFrame转dict字典过程详解
Dec 26 Python
Python Selenium参数配置方法解析
Jan 19 Python
python 装饰器的使用示例
Oct 10 Python
Django路由层如何获取正确的url
Jul 15 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 #Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 #Python
编写Python小程序来统计测试脚本的关键字
Mar 12 #Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 #Python
Python语言的面相对象编程方式初步学习
Mar 12 #Python
举例讲解Python中的list列表数据结构用法
Mar 12 #Python
Python中的if、else、elif语句用法简明讲解
Mar 11 #Python
You might like
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
python中定义结构体的方法
2013/03/04 Python
go和python调用其它程序并得到程序输出
2014/02/10 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
网管求职信
2014/03/03 职场文书
大学班级学风建设方案
2014/05/01 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
绿色环保倡议书
2015/04/28 职场文书
小学数学国培研修日志
2015/11/13 职场文书
详解Nginx 工作原理
2021/03/31 Servers
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Python 多线程处理任务实例
2021/11/07 Python