.. blogpost:: :title: Build rpy2 on Windows :keywords: rpy2 :date: 2016-08-25 :categories: module, build I started this blog post because I got the following error with `rpy2 `_: :: In [2]: %load_ext rpy2.ipython --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in () ----> 1 get_ipython().magic('load_ext rpy2.ipython') c:\python35_x64\lib\site-packages\IPython\core\interactiveshell.py in magic(sel .... c:\python35_x64\lib\site-packages\rpy2\ipython\rmagic.py in load_ipython_extension(ip) 786 # Initialising rpy2 interferes with readline. Since, at this point, we've 787 # probably just loaded rpy2, we reset the delimiters. See issue gh-2759. --> 788 if ip.has_readline: 789 ip.readline.set_completer_delims(ip.readline_delims) AttributeError: 'ZMQInteractiveShell' object has no attribute 'has_readline' The first solution just consists in commenting out those two lines: :: --> 788 # if ip.has_readline: 789 # ip.readline.set_completer_delims(ip.readline_delims) I then though about compiling rpy2 for Windows. But... I'm still figuring out. It does not work but this is what I did. You need: * Install `R `_ * Install `Rtools `_ * Install `Cygwin `_ Maybe: * Install `pexports `_ (exports all symbols from a DLL: ``pexports "R.dll" >R.def``, `import R `_) Steps: * Get the sources from `rpy2 `_ **Compilation with Visual Studio 2015 (still failing)** Open *_rinterface.c*, comment out the following lines:: //static PyTypeObject NAInteger_Type; //static PyTypeObject NALogical_Type; //static PyTypeObject NAReal_Type; //static PyTypeObject NAComplex_Type; //static PyTypeObject NACharacter_Type; //Rp->ResetConsole = EmbeddedR_ResetConsole; From a cygwin environment: :: export PATH=$PATH:'/cygdrive/c/Program Files/R/R-3.3.1/bin/x64' export PATH=$PATH:'/cygdrive/c/Program Files/R/R-3.3.1/include' export R_HOME=/cygdrive/c/Program\ Files/R/R-3.3.1 Or from the command line before starting *cygwin*: set PATH=%PATH%;c:\Program Files\R\R-3.3.1\bin\x64 set PATH=%PATH%;c:\Program Files\R\R-3.3.1\include set R_HOME=c:\Program Files\R\R-3.3.1 set PATH=%PATH%;C:\cygwin64\bin In file ``distutils/cygwinccompiler.py``, modifies: * function *get_msvcr*, replace :: else: raise ValueError("Unknown MS Compiler version %s " % msc_ver) by:: else: return ["msvcr140"] * function *Mingw32CCompiler.__init__*, comment out the following lines:: if is_cygwingcc(): raise CCompilerError( 'Cygwin gcc cannot be used with --compiler=mingw32') From a Cygwin environment, run: :: /cygdrive/c/Python35_x64/python setup.py build_ext -I C:\\Program\ Files\\R\\R-3.3.1\\include Or from the Windows command line: :: c:\Python35_x64\python setup.py build_ext -I "C:\Program Files\R\R-3.3.1\include" --compiler=mingw32 Without the option ``--compiler=mingw32``, I get the following error which means I cannot link with *R.dll* symbols. :: ... error LNK2001: unresolved external symbol Rf_allocVector3 ... fatal error LNK1120: 107 unresolved externals **Remarks** If you get the following error: :: 'sh' is not recognized as an internal or external command Just add: :: set PATH=%PATH%;C:\cygwin64\bin https://wanglongqi.github.io/r/2015/04/08/rpy2install/