美文网首页
如何在没有root 权限的集群/服务器上安装pypy

如何在没有root 权限的集群/服务器上安装pypy

作者: 小光amateur | 来源:发表于2019-07-17 10:41 被阅读0次

    前言

    众所周知,python的一个大缺陷就是运行速度缓慢,尤其是在处理for循环的时候,要么需要使用列表推导,消耗内存来换取速度,要么就使用jit来提速,现在,我们可以使用pypy这个新的python程序来运行我们的python脚本来提速。

    官方只提供了针对ubuntu和redhat的二进制版本,这对centos来说就要用源码编译安装,而对于没有root权限的用户来说,简直就是噩梦。

    方法

    先下载安装miniconda3

    wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O Miniconda3-latest-Linux-x86_64.sh
    
    bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/anaconda_ete/
    

    创建python3虚拟空间

    conda create -n pypy3 python==3.6
    
    source activate pypy3
    

    去anaconda 官方查看最新的pypy版本

    搜索

    为conda 添加清华大学源

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --set show_channel_urls yes
    
    #conda-forge
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    
    #bioconda
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
    

    安装pypy3.6

    conda install pypy3.6
    

    安装pypy版本的pip

    pypy3 -m ensurepip
    

    安装第三方模块

    #方法和python3一样
    pypy3 -m pip install numpy
    #pandas 不用试了,安装会报错
    pypy3 -m pip install pandas 
    

    测试下速度的差距

    主要是通过 蒙特卡罗法来计算圆周率

    先搞一个perl脚本

    #pi.pl
    $time1 = time();
    foreach (1..20000000) {
      my($x, $y) = (rand(), rand()); 
      if(sqrt($x ** 2 + $y ** 2) < 1) {
        $total += 1;
      } 
    }
    $pi = 4.0 * $total / 20000000;
    $time2 = time();
    
    print "Pi = " , $pi, " time = ", $time2 - $time1;
    

    再搞一个python脚本

    #pi.py
    import random
    import datetime
    import math
    
    starttime = datetime.datetime.now()
    total = 0
    for i in xrange(20000000):
        x, y = random.random(), random.random()
        if math.sqrt(x ** 2 + y ** 2) < 1:
            total += 1
    pi = 4.0 * total / 20000000
    endtime = datetime.datetime.now()
    print("pi = ", pi , " time = ", (endtime - starttime).seconds)
    

    再搞一个C脚本

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    #include <math.h>
    
    int main() {
      time_t start_time, end_time; 
      double elapsed_time; 
      double x, y, pi;
      long i , total;
      total = 0;
      srand((unsigned)time(0));
      time(&start_time);
      for(i = 0 ; i < 20000000; i ++ ) {
        x = rand() / (double)(RAND_MAX);
        y = rand() / (double)(RAND_MAX);    
        if (sqrt(x * x + y * y) < 1) {
          total += 1;
        }      
      }
      pi = 4.0 * total / 20000000; 
      time(&end_time); 
      elapsed_time = difftime(end_time, start_time);
      printf(" total = %d, pi = %f, time = %f", total ,pi, elapsed_time);   
    }
    

    分别测试运行时间,我的结果是pypy最快。

    相关文章

      网友评论

          本文标题:如何在没有root 权限的集群/服务器上安装pypy

          本文链接:https://www.haomeiwen.com/subject/mmpekctx.html