Source code for pymyinstall.installcustom.install_custom_R
"""
Various functions to install `R <http://www.r-project.org/>`_.
:githublink:`%|py|5`
"""
from __future__ import print_function
import sys
import re
import os
from ..installhelper.install_cmd_helper import run_cmd
from .install_custom import download_page, download_file
[docs]def get_R_version():
"""
returns the version of installed R,
we only focus on the x64 version
:return: tuple (bin, version), None if R is not installed
:githublink:`%|py|20`
"""
if sys.platform.startswith("win"):
path = "{0}\\R".format(os.environ["ProgramFiles"])
if os.path.exists(path):
vers = os.listdir(path)
vers.sort()
if len(vers) == 0:
return None
vers = vers[-1]
bin = os.path.join(path, vers, "bin", "x64")
if not os.path.exists(bin):
return None
return (bin, vers)
return None
else:
raise NotImplementedError("not available on platform " + sys.platform)
[docs]def IsRInstalled():
"""
:return: True of False whether or not it was installed
:githublink:`%|py|41`
"""
r = get_R_version()
return r is not None
[docs]def install_R(
temp_folder=".", fLOG=print, install=True, force_download=False, version=None):
"""
Install `R <http://www.r-project.org/>`_.
It does not do it a second time if it is already installed.
:param temp_folder: where to download the setup
:param fLOG: logging function
:param install: install (otherwise only download)
:param force_download: force the downloading of R
:param version: None for last, otherwise requested version
:return: temporary file
:githublink:`%|py|58`
"""
bb = IsRInstalled()
if bb and not force_download:
return True
link = "http://cran.univ-paris1.fr/bin/windows/base/"
page = download_page(link)
if sys.platform.startswith("win"):
reg = re.compile("href=\\\"(.*?[.]exe)\\\"")
alls = reg.findall(page)
if len(alls) == 0:
raise Exception(
"unable to find a link on a .exe file on page: " +
page)
url = link + alls[0]
if version is not None:
spl = url.split("/R-")
url = spl[0] + "/old/" + version + "/R-" + version + "-win.exe"
full = url.split("/")[-1]
outfile = os.path.join(temp_folder, full)
fLOG("[pymy] download ", url)
local = download_file(url, outfile)
if install and not bb:
run_cmd("msiexec /i " + local, fLOG=fLOG, wait=True)
return local
else:
raise NotImplementedError("not available on platform " + sys.platform)