2016.5.16更新: 提供PyV8 for python2.7 的window安裝包網盤下載
這幾天需要在使用
PyV8
來進行python
與javascript
的交互。之前在window
下安裝過,也沒有遇到什麼問題。
結果這次在Ubuntu
安裝遇到了不少坑–主要是網上的辦法都不可行,不知道爲啥。最終折騰了一晚上,終於好了。
windows下的安裝
在windows下安裝要簡單很多,如果有了c++
環境之後,只需要在pyv8下載(貌似只有python2.7)下載適合自己系統版本的exe
文件即可,然後直接安裝就好了,相對來說簡單一些
- 如果上不去google, 可以用下面的網盤地址:
PyV8 for python2.7- 還有一種方式: 利用有人分享的二進制文件:pyv8-binaries, 這裏面版本比較全,但是未提供exe。
在Ubuntu下安裝
安裝依賴
首先安裝依賴:Boost
, 這一步網上的大部分教程都差不多,也是必須的;
1 2 3 |
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
網上的大部分教程均是使用svn
checkout出V8,PyV8的代碼,然後再設置什麼V8的目錄爲V8_HOME
最後在編譯PyV8
;先不說能不能使用svn
遷出,(反正我翻牆都沒有遷出來),後來去google.code網站上,
下載了源代碼,結果編譯期間出各種錯誤,根本沒辦法執行。
還有一些直接使用pip
安裝的教程,也是報各種錯,缺少這個啦,缺少那個啦。
於是就想直接找到二進制文件,直接拷到python的包目錄得了。結果這條路還算順暢!最終比較輕鬆的安裝成功了。
二進制文件googlecode官網有,有人在github上也提供了很全面的二進制安裝文件https://github.com/emmetio/pyv8-binaries 找到適合你機器的版本下載.
解壓出來應該有如下兩個文件:一個源碼,一個二進制文件。一般Python的第三方包有這倆文件就夠了.
1 2 |
PyV8.py _PyV8.so |
然後把這兩個文件拷到你的python第三方包的目錄裏面就好,比如我的是:
1 2 |
cd pyv8 //進入解壓後的目錄 sudo cp * /usr/lib/python2.7/dist-packages/ |
之後嘗試導入import PyV8
結果報以下的一個錯誤:
1
|
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
1 2 |
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
最後加入了一行:(路徑可能不一致,請根據自己的實際情況添加)
1
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu
|
保存退出之後,再用source ~/.bashrc
重載一下就好了。再一次import
PyV8
正常!
執行下面的測試代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import PyV8 ctxt = PyV8.JSContext() ctxt.enter() func = ctxt.eval(""" (function(){ function hello(){ return "Hello world."; } return hello(); }) """) print func() |
執行輸出Hello World
就說明安裝成功了。可以去模擬js代碼了~~~