標籤:style class blog code java http
當前linux發行版python版本預設基本上都是2.7的,如果系統中有了python3.0以後的,或者自己安裝了
python3.3,但是用pip或者easy_install安裝python3的module並不很方面,使用virtualenv就方便多了,
安裝pypy環境較好的辦法也是用virtualenv。通過如下:
virtualenv -p /path/to/python3 dir_name
當然前提是你安裝了virtualenv,如下安裝:
sudo apt-get install python-virtualenv或者sudo pip install virtualenv。
用virtualenv會在目前的目錄中產生dir_name目錄,這樣就產生了python3的虛擬環境,具體使用就不囉嗦了,
畢竟virtualenv網上介紹的很多了。
那麼同樣的方法我們用virtualenv -p /path/to/pypy virtualpypy,建立一個virtualpypy目錄。進入
virtualpypy,然後source bin/activate,在使用pip或者easy_install安裝的庫就可以了,比如安裝了flask,
想讓uwsgi運行起來有點麻煩,需要用pip在虛擬環境中安裝uwsgi:pip install uwsgi,這樣會編譯一個
適合pypy的uwsgi。
uwsgi.xml檔案如下:
1 <uwsgi> 2 <socket>0.0.0.0:6001</socket> 3 <listen>20</listen> 4 <chdir>/path/to/virtualpypy</chdir> 5 <pythonpath>/path/to/virtualpypy</pythonpath> 6 <virtualenv>/path/to/virtualpypy</virtualenv> 7 <processes>3</processes> 8 <master>true</master> 9 <pidfile>/path/to/virtualpypy/uwsgi.pid</pidfile>10 <wsgi-file>/path/to/virtualpypy/application.py</wsgi-file>11 <profiler>true</profiler>12 <memory-report>true</memory-report>13 <enable-threads>true</enable-threads>14 <no-site>true</no-site>15 <pypy-lib>/path/to/virtualpypy/libpypy-c.so</pypy-lib>16 <logdate>true</logdate>17 <limit-as>6048</limit-as>18 </uwsgi>
注意第15行,如果沒有libpypy-c.so這個動態連結程式庫,uwsgi -x uwsgi.xml就會報錯。
我們就需要下載或者編譯一個libpypy-c.so。
下載http://projects.unbit.it/downloads/pypy/libpypy-c-x86_64.so
編譯就需要下載pypy源碼tarball了,本人用的pypy-2.3.1,
./rpython/bin/rpython -Ojit --shared --gcrootfinder=shadowstack pypy/goal/targetpypystandalone
本人4G記憶體,64位機花費了1小時多編譯完成。會產生libpypy-c.so和pypy-c兩個重要的檔案。
既然網上提供了為何還要費勁編譯,這就是問題所在,由於用apt-get安裝的pypy版本與從網上下載先來的
libpypy-c-x86_64.so可能版本不同導致出現下面的錯誤:
debug: OperationError:
debug: operror-type: AssertionError
debug: operror-value:
所以如果沒有出錯最好,出錯了還是編譯一個吧,把libpypy-c.so放到動態連結路的預設路徑下或者
LD_LIBRARY_PATH環境變數裡。把pypy-c利用virtualenv -p /path/to/pypy-c virtualnew建立虛擬環境,
再同上面的方法安裝flask或者django、uwsgi.
Wed Jun 25 00:41:26 2014 - uwsgi socket 0 bound to TCP address 0.0.0.0:6001 fd 3Initialized PyPy with Python 2.7.6 (32f35069a16d819b58c1b6efb17c44e3e53397b2, Jun 23 2014, 15:54:22)[PyPy 2.3.1 with GCC 4.8.2]PyPy Home: /path/to/virtualnewWed Jun 25 00:41:27 2014 - your server socket listen backlog is limited to 20 connectionsWed Jun 25 00:41:27 2014 - your mercy for graceful operations on workers is 60 secondsWed Jun 25 00:41:27 2014 - mapped 291072 bytes (284 KB) for 3 coresWed Jun 25 00:41:27 2014 - *** Operational MODE: preforking ***Wed Jun 25 00:41:27 2014 - *** no app loaded. going in full dynamic mode ***Wed Jun 25 00:41:27 2014 - *** uWSGI is running in multiple interpreter mode ***Wed Jun 25 00:41:27 2014 - spawned uWSGI master process (pid: 1566)Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 1 (pid: 1569, cores: 1)Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 2 (pid: 1570, cores: 1)Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 3 (pid: 1571, cores: 1)
pypy終於可以好好用用了,看上面紅色兩行可知pypy 2.3.1對應python 2.7.6。本人對pypy有
著相當的好感,它不僅在運行flask、django等項目上比python要快(之前的文章本人就介紹過pypy與
python計算斐波那契數列時間的比較,差了可謂一條街的距離),並且它是python開發的(rpython)。
就像java、go等許多進階語言一樣,最初雖然是c開發的,但最後都是回到了自己解釋自己。
雖然pypy現在還有諸多問題,雖然官方python依舊是c開發的 ,但是本人希望pypy更好的發展。
只為您的快、只為您是python寫的python解譯器。