Windows 7 64bit编译rpy2 Python扩展

由于自己缺省编译Python扩展的编译器是Visual C++,如果使用pip直接安装,rpy2模块的代码原本就不考虑微软C编译器,连inline关键字部分都过不去。因此选用MinGW进行编译,方法是在Python安装目录的Lib\distutils下创建distutils.cfg文件,写入如下内容:

[build]
compiler=mingw32

可能是针对Windows环境测试不充分,要想通过编译需要修改源代码,首先从PyPi下载源码包,地址为https://pypi.python.org/packages/source/r/rpy2/rpy2-2.6.0.tar.gz#md5=679898fbc832d4f05a5efcf1a7eb1a68

解开源码包,在rpy2-2.6.0\rpy\rinterface目录中修改_rinterface.c文件,找到第1321行,注释掉这句源代码

/*Rp->ResetConsole = EmbeddedR_ResetConsole; */


因为在当前版本R的头文件中压根没有这个成员定义,有趣的是顺便发现了开源开发人员调皮可爱的注释,分享一下

Rp->Busy = Re_Busy;
  Rp->ShowMessage = EmbeddedR_ShowMessage;
  /* Rp->FlushConsole = EmbeddedR_FlushConsole; */
  /*Rp->ResetConsole = EmbeddedR_ResetConsole; */
  Rp->CallBack = win32CallBack;
  Rp->R_Quiet = FALSE;
  Rp->R_Interactive = TRUE;
  Rp->RestoreAction = SA_RESTORE;
  Rp->SaveAction = SA_SAVEASK;
  /* hocus-pocus for R-win32 - just don't ask why*/
  R_SetParams(Rp);
  R_SizeFromEnv(Rp);
  R_SetParams(Rp);
  setup_term_ui();

之后需要修改源码包根目录下setup.py的内容,找到第179行,增加库目录定义,如果不加这个库目录gcc找不到python27.dll的位置,就会出现未解决的外部引用符号错误,扯远了,不管你加在哪里,只要把库目录加进去就可以了,我用的是Anaconda,所以加出来如下所示

    if sys.platform == 'win32':
        define_macros.append(('Win32', 1))
        if "64 bit" in sys.version:
            define_macros.append(('Win64', 1))
            extra_link_args.append('-m64')
            extra_compile_args.append('-m64')
            # MS_WIN64 only defined by pyconfig.h for MSVC. 
            # See http://bugs.python.org/issue4709
            define_macros.append(('MS_WIN64', 1))
            library_dirs.append('d:/Anaconda')
    else:

最后修改Python按照目录下Lib\distutils中的unixccompiler.py代码,找到227行,注释掉原本从环境变量定位编译器的代码,直接指定编译器为gcc

#compiler = os.path.basename(sysconfig.get_config_var("CC"))
        #
        compiler = 'gcc'
        #


之后就只可执行如下命令进行安装了

python setup.py build
python setup.py install

也预祝大家玩得愉快,:)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值