Why do I first have to submit something through reticulate::py_run_string()
for reticulate::py_available()
to return TRUE
?
I ran the below set of calls through a clean R session:
> packageVersion("reticulate")
[1] ‘1.40.0’
> reticulate::py_available()
[1] FALSE
> Sys.setenv(RETICULATE_PYTHON = "/usr/bin/python3")
> reticulate::py_available()
[1] FALSE
> reticulate::py_run_string("")
> reticulate::py_available()
[1] TRUE
py_run_string("")
triggers Python initialization while py_available()
by default does not, it only checks if Python is already initialized in current R session. Though you can set initialize
to change that behaviour.
Or perhaps it's reticulate::py_discover_config()
you are after -- it does not load Python, just attempts to figure out config:
# discover config without initializing python
reticulate::py_discover_config()$python
#> [1] "C:/Users/margusl/miniforge3/envs/py312/python.exe"
reticulate::py_available()
#> [1] FALSE
# force init before checking:
reticulate::py_available(initialize = TRUE)
#> [1] TRUE
reticulate::py_available()
#> [1] TRUE