# Returns the current MLflow R package version
mlflow_version <- function() {
utils::packageVersion("mlflow")
}
# Returns the name of a conda environment in which to install the Python MLflow package
mlflow_conda_env_name <- function() {
paste("r-mlflow", mlflow_version(), sep = "-")
}
# Create conda env used by MLflow if it doesn't already exist
#' @importFrom reticulate conda_install conda_create conda_list
#' @param python_version Python version to use within conda environment created for
#' installing the MLflow CLI.
mlflow_maybe_create_conda_env <- function(python_version) {
packages <- c(paste("python", python_version, sep = "="))
conda <- mlflow_conda_bin()
conda_env_name <- mlflow_conda_env_name()
if (!conda_env_name %in% conda_list(conda = conda)$name) {
conda_create(conda_env_name, conda = conda, packages = packages)
}
}
#' Install MLflow
#'
#' Installs auxiliary dependencies of MLflow (e.g. the MLflow CLI). As a
#' one-time setup step, you must run install_mlflow() to install these
#' dependencies before calling other MLflow APIs.
#'
#' install_mlflow() requires Python and Conda to be installed.
#' See \url{https://www.python.org/getit/} and \url{https://docs.conda.io/projects/conda/en/latest/user-guide/install/}.
#'
#' Alternatively, you can set MLFLOW_PYTHON_BIN and MLFLOW_BIN environment variables
#' instead. MLFLOW_PYTHON_BIN should point to python executable and MLFLOW_BIN to mlflow cli
#' executable. These variables allow you to use custom mlflow installation. Note that there may be
#' some compatibility issues if the custom mlflow version does not match the version of the R
#' package.
#'
#' @examples
#' \dontrun{
#' library(mlflow)
#' install_mlflow()
#' }
#'
#' @importFrom reticulate conda_install conda_create conda_list
#' @param python_version Optional Python version to use within conda environment created for
#' installing the MLflow CLI. If unspecified, defaults to using Python 3.6
#' @export
install_mlflow <- function(python_version = "3.6") {
mlflow_maybe_create_conda_env(python_version)
# Install the Python MLflow package with version == the current R package version
packages <- c(paste("mlflow", "==", mlflow_version(), sep = ""))
conda <- mlflow_conda_bin()
conda_install(packages, envname = mlflow_conda_env_name(), pip = TRUE, conda = conda)
}
#' Uninstall MLflow
#'
#' Uninstalls MLflow by removing the Conda environment.
#'
#' @examples
#' \dontrun{
#' library(mlflow)
#' install_mlflow()
#' uninstall_mlflow()
#' }
#'
#' @importFrom reticulate conda_install conda_create conda_list
#' @export
uninstall_mlflow <- function() {
reticulate::conda_remove(envname = mlflow_conda_env_name(), conda = mlflow_conda_bin())
}
mlflow_conda_bin <- function() {
conda_home <- Sys.getenv("MLFLOW_CONDA_HOME", NA)
conda <- if (!is.na(conda_home)) paste(conda_home, "bin", "conda", sep = "/") else "auto"
conda_try <- try(conda_binary(conda = conda), silent = TRUE)
if (class(conda_try) == "try-error") {
msg <- paste(attributes(conda_try)$condition$message,
paste(
" If you are not using conda, you can set the environment variable",
"MLFLOW_PYTHON_BIN to the path of your python executable."
),
sep = "\n"
)
stop(msg)
}
conda_try
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.