uwsgi、virtualenv 、pypy和flask

    当前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 3
Initialized 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/virtualnew
Wed Jun 25 00:41:27 2014 - your server socket listen backlog is limited to 20 connections
Wed Jun 25 00:41:27 2014 - your mercy for graceful operations on workers is 60 seconds
Wed Jun 25 00:41:27 2014 - mapped 291072 bytes (284 KB) for 3 cores
Wed 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解释器。

原文地址:https://www.cnblogs.com/wuchaofan/p/3800902.html