# reticulate 1.28
- Fixed issue where `source_python()` (and likely many other entrypoints)
would error if reticulate was built with Rcpp 1.0.10. Exception and
error handling has been updated to accommodate usage of `R_ProtectUnwind()`.
(#1328, #1329).
- Fixed issue where reticulate failed to discover Python 3.11 on Windows. (#1325)
- Fixed issue where reticulate would error by attempting to bind to
a cygwin/msys2 installation of Python on Windows (#1325).
# reticulate 1.27
- `py_run_file()` now ensures the `__file__` dunder is visible to the
executing python code. (#1283, #1284)
- Fixed errors with `install_miniconda()` and `conda_install()`,
on Windows (#1286, #1287, conda/conda#11795, #1312, #1297),
and on Linux and macOS (#1306, conda/conda#10431)
- Fixed error when activating a conda env from a UNC drive on Windows (#1303).
# reticulate 1.26
- Fixed issue where reticulate failed to bind to python2. (#1241, #1229)
- A warning is now issued when reticulate binds to python2 that python2
support will be removed in an upcoming reticulate release.
- `py_id()` now returns a character string, instead of an R integer (#1216).
- Fixed an issue where `py_to_r()` would not convert elements of a
dictionary (#1221).
- Fixed an issue where setting `RETICULATE_PYTHON` or `RETICULATE_PYTHON_FALLBACK`
on Windows to the pyenv-win `python.bat` shim would result in an error (#1263).
- Fixed an issue where `datetime.datetime` objects with a `tzinfo` attribute
was not getting converted to R correctly (#1266).
- Fixed an issue where pandas `pandas.Categorical(,ordered=True)` Series were
not correctly converted to an R ordered factor (#1234).
- The `reticulate` Python engine no longer halts on error for Python chunks
containing parse errors when the `error=TRUE` chunk option is set. (#583)
- `install_python()` now leverages brew for python build dependencies like
openssl@1.1 if brew is already installed and on the PATH, substantially speeding up
`install_python()` on macOS systems with brew configured.
- Fixed an issue where reticulate would fail to bind to a conda environment on macOS or linux
if conda installed a non-POSIX compliant activation script into the conda environment. (#1255)
- Fixed an issue where the python knitr engine would error when printing to
HTML a constructor of class instances with a `_repr_html_` or `to_html` method
(e.g., `pandas.DataFrame`; #1249, #1250).
- Fixed an issue where the python knitr engine would error when printing a
plotly figure to an HTML document in some (head-less) linux environments (#1250).
- Fixed an issue where `conda_install(pip=TRUE)` would install packages into
a user Python library instead of the conda env if the environment variable
`PIP_USER=true` was set. `py_install()`, `virtualenv_install()`, and
`conda_install()` now always specify `--no-user` when invoking `pip install`. (#1209)
- Fixed issue where `py_last_error()` would return unconverted Python objects (#1233)
- The Knitr engine now supports printing Python objects with
`_repr_markdown_` methods. (via quarto-dev/quarto-cli#1501)
- `sys.executable` on Windows now correctly reports the path to the Python executable
instead of the launching R executable. (#1258)
- The `sys` module is no longer automatically imported in `__main__` by reticulate.
- Fixed an issue on Windows where reticulate would fail to find Python installations from pyenv installed via scoop.
- Fixed an issue where `configure_environment()` would error on Windows. (#1247)
- Updated docs for compatibility with HTML5 / R 4.2.
- Updated r_to_py.sparseMatrix() method for compatibility with Matrix 1.4-2.
# reticulate 1.25
- Fixed an issue where reticulate would fail if R was running embedded under rpy2.
reticulate now ensures the Python GIL is acquired before calling into Python.
(#1188, #1203)
- Fixed an issue where reticulate would fail to bind to an ArcGIS Pro conda environment
(#1200, @philiporlando).
- Fixed an issue where reticulate would fail to bind to an Anaconda
base environment on Windows.
- All commands that create, modify, or delete a Python environment now echo
the system command about to be executed. Affected:
virtualenv_{create,install,remove}
conda_{create,clone,remove,install,update}
py_install
- `install_python()` and `create_virtualenv()` gain the ability to automatically
select the latest patch of a requested Python version.
e.g.: `install_python("3.9:latest")`, `create_virtualenv("my-env", version = "3.9:latest")`
- `install_python()` `version` arg gains default value of `"3.9:latest"`.
`install_python()` can now be called with no arguments.
- Fixed an issue where reticulate would fail to bind to a conda python
if the user didn't have write permissions to the conda installation (#1156).
- Fixed an issue where reticulate would fail to bind to a conda python if
spaces were present in the file path to the associated conda binary (#1154).
- `use_python(, required = TRUE)` now issues a warning if the request will be ignored (#1150).
- New function `py_repr()` (#1157)
- `print()` and related changes (#1148, #1157):
- The default `print()` method for Python objects now invokes `py_repr()` instead of `str()`.
- All Python objects gain a default `format()` method that invokes `py_str()`.
- `py_str()` default method no longer strips the object memory address.
- `print()` now returns the printed object invisibly, for composability with `%>%`.
- Exception handling changes (#1142, @t-kalinowski):
- R error messages from Python exceptions are now truncated differently to satisfy `getOption("warning.length")`.
A hint to call `reticulate::py_last_error()` is shown if the exception message was truncated.
- Python buffers `sys.stderr` and `sys.stdout` are now flushed when Python exceptions are raised.
-`py_last_error()`:
* Return object is now an S3 object 'py_error', includes a default print method.
* The python Exception object ('python.builtin.Exception') is available as an R attribute.
* Gains the ability to restore a previous exception if provided in a call `py_last_error(previous_error)`
- Python traceback objects gain a default `format()` S3 method.
- Fixed `py_to_r()` for scipy matrices when scipy >= 1.8.0, since sparse matrices
are now deprecated.
- Fixed `r_to_py()` for small scipy matrices.
- New maintainer: Tomasz Kalinowski
# reticulate 1.24
- Fixed an issue where `reticulate` would fail to bind to the system version
of Python on macOS if command line tools were installed, but Xcode was not.
# reticulate 1.23
- `use_condaenv()` gains the ability to accept an absolute path to a python
binary for `envname`.
- All python objects gain a `length()` method, that returns either `py_len(x)`,
or if that fails, `as.integer(py_bool(x))`.
- `conda_create()` default for `python_version` changed from
`NULL` to `miniconda_python_version()` (presently, 3.8).
- New function `py_bool()`, for evaluating Python "truthiness" of an object.
- `reticulate` gains the function `py_list_packages()`, and can be used to
list the Python modules available and installed in a particular Python
environment. (#933)
- `reticulate` now supports conversion of Python [datatable](https://github.com/h2oai/datatable)
objects. (#1081)
- `repl_python()` gains support for invoking select magic and system commands
like `!ls` and `%cd
`. See `?repl_python()` for details and examples.
- The development branch for `reticulate` has moved to the "main" branch.
- `reticulate` gains `reticulate::conda_update()`, for updating the
version of `conda` in a particular `conda` installation.
- `reticulate` gains `reticulate::miniconda_uninstall()`, for uninstalling
the reticulate-managed version of Miniconda. (#1077)
- `reticulate::use_python()` and friends now assume `required = TRUE` by
default. For backwards compatibility, when `use_python()` is called
as part of a package load hook, the default value will instead be `FALSE`.
- `reticulate` now provides support for Python environments managed by
[poetry](https://python-poetry.org/). For projects containing a
`pyproject.toml` file, `reticulate` will attempt to find and use the virtual
environment managed by Poetry for that project. (#1031)
- The default version of Python used for the `r-reticulate` Miniconda environment
installed via `reticulate::install_miniconda()` has changed from 3.6 to 3.8.
- `reticulate::install_miniconda()` now prefers installing the latest
arm64 builds of miniforge. See https://conda-forge.org/blog/posts/2020-10-29-macos-arm64/
for more details.
- `reticulate::conda_create()` gains the `environment` argument, used when
creating a new conda environment based on an exported environment definition
(e.g. `environment.yml` or `environment.json`).
- `reticulate` gains the function, `conda_export()`, for exporting a conda
environment definition as YAML. Environments are exported as via the
`conda env export` command. (#779)
- `reticulate::find_conda()` will now locate miniforge Conda installations
located within the default install locations.
- Fixed an issue that caused `reticulate::conda_install(pip = TRUE)`
to fail on windows. (#1053, @t-kalinowski)
# reticulate 1.22
- Fixed a regression that caused `reticulate::conda_install(pip = TRUE)`
to fail. (#1052)
# reticulate 1.21
- `use_condaenv("base")` can now be used to activate the base Anaconda
environment.
- `reticulate` will now execute any hooks registered via
`setHook("reticulate.onPyInit", <...>)` after Python has been initialized.
This can be useful for packages that need to take some action after
`reticulate` has initialized Python.
- Further refined interrupt handling.
- Fixed an issue where attempting to bind `reticulate` to `/usr/bin/python3`
on macOS could fail if Xcode was not installed. (#1017)
- The `reticulate` Python REPL no longer exits when a top-level interrupt
is sent (e.g. via Ctrl + C).
- The miniconda auto-installer now supports aarch64 Linux machines. (#1012)
- Fixed an issue where matplotlib plots were incorrectly overwritten when
multiple Python chunks in the same R Markdown document included plot output.
(#1010)
- `reticulate` can now use the version of Python configured in projects using
[pipenv](https://pypi.org/project/pipenv/). If the project contains a
`Pipfile` at the root directory (as understood by `here::here()`), then
`reticulate` will invoke `pipenv --venv` to determine the path to the
Python virtual environment associated with the project. Note that the
`RETICULATE_PYTHON` environment variable, as well as usages of
`use_python(..., force = TRUE)`, will still take precedence. (#1006)
- Fixed an issue where `reticulate::py_run_string(..., local = TRUE)` failed
to return the dictionary of defined Python objects in some cases.
# reticulate 1.20
- Fixed an issue causing tests to fail on CRAN's M1mac machine.
# reticulate 1.19
- Fixed an issue where `reticulate`'s interrupt handlers could cause issues
with newer versions of Python.
- `reticulate` now better handles Pandas categorical variables containing
`NA` values. (#942)
- `reticulate` now supports converting `pandas.NA` objects into R `NA` objects.
(#950)
- `reticulate` now sets the `PYTHONIOENCODING` environment variable to UTF-8
when running within RStudio. This should allow UTF-8 input and output to be
handled more appropriately.
- `reticulate` gains the `install_python()` function, used to install different
versions of Python via [pyenv](https://github.com/pyenv/pyenv)
([pyenv-windows](https://github.com/pyenv-win/pyenv-win) on Windows).
- Interrupt signals (e.g. those generated by `Ctrl + C`) are now better handled
by `reticulate`. In particular, when `repl_python()` is active, `Ctrl + C`
can be used to interrupt a pending Python computation.
- `virtualenv_create()` gains the `pip_version` and `setuptools_version`
arguments, allowing users to control the versions of `pip` and `setuptools`
used when initializing the virtual environment. The `extra` argument can
also now be used to pass arbitrary command line arguments when necessary.
- `virtualenv_create()` gains the `module` argument, used to control whether
`virtualenv` or `venv` is used to create the requested virtual environment.
- `py_to_r.datetime.datetime` no longer errs when `tzname` is `NULL`, and
instead assumes the time is formatted for `UTC`. (#876)
- `reticulate` now supports the rendering of [plotly](https://plotly.com/)
plots and [Altair](https://altair-viz.github.io/) charts in rendered
R Markdown documents. (#711)
- `reticulate` now avoids invoking property methods when inferring the type
for Python class members, for auto-completion systems. (#907)
- `reticulate` now attempts to set the `QT_QPA_PLATFORM_PLUGIN_PATH`
environment variable when initializing a Conda installation of Python,
when that associated plugins directory exists. (#586)
- The `reticulate` Python engine now supports the `results = "hold"` knitr
chunk option. When set, any generated outputs are "held" and then displayed
after the associated chunk's source code. (#530)
- `conda_create()` gains the `python_version` argument, making it easier to
request that Conda environments are created with a pre-specified version
of Python. (#766)
- Fixed an issue where `reticulate::conda_install()` would attempt to
re-install the default Python package, potentially upgrading or downgrading
the version of Python used in an environment.
- Fixed an issue where `reticulate` invoked its `reticulate.initialized` hook
too early.
- Fixed an issue where Python modules loaded on a separate thread could cause
a crash. (#885)
- `conda_install()` now allows version specifications for the `python_version`
argument; e.g. `conda_install(python_version = ">=3.6")`. (#880)
- Fixed an issue where `conda_install()` failed to pass along `forge` and
`channel` in calls to `conda_create()`. (#878)
- Fixed an issue where Python's auto-loader hooks could fail when binding
to a Python 2.7 installation.
# reticulate 1.18
- Fixed an issue where `python_config()` could throw an error when attempting
to query information about a Python 2.6 installation.
# reticulate 1.17
- `reticulate` now checks for and disallows installation of Python packages
during `R CMD check`.
- `reticulate` no longer injects the `r` helper object into the main
module if another variable called `r` has already been defined.
- The function `py_help_handler()` has now been exported, to be used by
front-ends and other tools which need to provide help for Python objects
in different contexts. (#864)
- Fixed an issue where timezone information could be lost when converting
Python datetime objects to R. (#829)
- Fixed an issue where numeric (rather than integer) dimensions could cause
issues when converting SciPy sparse matrices to their R counterparts. (#844)
- Fixed an issue where R `data.frame`s with non-ASCII column names could not
be converted to Pandas DataFrames. (#834)
- Fixed an issue where the `pip_ignore_installed` argument in `conda_install()`
was silently being ignored.
- Fixed an issue where `reticulate::conda_install()` could re-install Python
into an environment when not explicitly requested by the user.
- `reticulate` now sets `LD_LIBRARY_PATH` when discovering Python. (#836)
- `reticulate` is now better at capturing Python logger streams (those that
write to stdout or stderr) when `py_capture_output()` is set. (#825)
- `reticulate` no longer calls `utils::loadhistory()` after each REPL iteration.
- `reticulate` now better detects when Python modules are loaded.
- `reticulate::import_from_path()` now accepts the `delay_load` parameter,
allowing modules which should be loaded from a pre-specified path
to be lazy-loaded.
- Fixed an issue where `reticulate` load hooks (normally defined via
`setHook("reticulate::::load", ...)`) would segfault if those
hooks attempted to load the hooked module.
- `reticulate` now attempts to resolve the conda binary used to create the
associated Conda environment in calls to `py_install()`. This should fix use
cases where Conda environments are placed outside of the Conda installation
itself.
- `reticulate` now sets `PYTHONPATH` before loading Python, to ensure modules
are looked up in the same locations where a regular Python interpreter would
find them on load. This should fix issues where `reticulate` was unable to
bind to a Python virtual environment in some cases.
- `reticulate::virtualenv_create()` gains the `packages` argument, allowing one
to choose a set of packages to be installed (via `pip install`) after the
virtual environment has been created.
- `reticulate::virtualenv_create()` gains the `system_site_packages` argument,
allowing one to control whether the `--system-site-packages` flag is passed
along when creating a new virtual environment. The default value can be
customized via the `"reticulate.virtualenv.system_site_packages"` option and
now defaults to `FALSE` when unset.
- Fixed an issue where `reticulate::configure_environment()` would fail
when attempting to configure an Anaconda environment. (#794)
- `reticulate` now avoids presenting a Miniconda prompt for interactive
sessions during R session initialization.
- Fixed unsafe usages of `Rprintf()` and `REprintf()`.
- `reticulate::py_install()` better respects the `method` argument, when
`py_install()` is called without an explicit environment name. (#777)
- `reticulate:::pip_freeze()` now better handles `pip` direct references.
(#775)
- Fixed an issue where output generated from `repl_python()` would
be buffered until the whole submitted command had completed.
(#739, @randy3k)
- `reticulate` now explicitly qualifies symbols used from TinyThread
with `tthread::`, to avoid issues with symbol conflicts during
compilation. (#773)
- `reticulate` will now prefer an existing Miniconda installation over
a `conda` binary on the PATH, when looking for Conda. (#790)
# reticulate 1.16
- TinyThread now calls `Rf_error()` rather than `std::terminate()`
when an internal error occurs.
- Conversion of Pandas DataFrames to R no longer emits deprecation
warnings with pandas >= 0.25.0. (#762)
- `reticulate` now properly handles the version strings returned by beta
versions of `pip`. (#757)
- `conda_create()` gains the `forge` and `channel` arguments,
analogous to those already in `conda_install()`. (#752, @jtilly)
# reticulate 1.15
- `reticulate` now ensures SciPy `csr_matrix` objects are sorted before
attempting to convert them to their R equivalent. (#738, @paulofelipe)
- Fixed an issue where calling `input()` from Python with no prompt
would fail. (#728)
- Lines ending with a semi-colon are no longer auto-printed in the
`reticulate` REPL. (#717, @jsfalk)
- `reticulate` now searches for Conda binaries in /opt/anaconda and
/opt/miniconda. (#713)
- The `conda` executable used by `reticulate` can now be configured using an R
option. Use `options(reticulate.conda_binary = <...>)` to force `reticulate`
to use a particular `conda` executable.
- `reticulate::use_condaenv()` better handles cases where no
matching environment could be found. (#687)
- `reticulate` gains the `py_ellipsis()` function, used to access
the Python `Ellipsis` builtin. (#700, @skeydan)
- `reticulate::configure_environment()` now only allows environment
configuration within interactive R sessions, and ensures that the
version of Python that has been initialized by Python is indeed
associated with a virtual environment or Conda environment.
Use `reticulate::configure_environment(force = TRUE)` to force
environment configuration within non-interactive R sessions.
- `reticulate` now automatically flushes output written to Python's
stdout / stderr, as a top-level task added by `addTaskCallback()`.
This behavior is controlled with the `options(reticulate.autoflush)`
option. (#685)
- `reticulate::install_miniconda()` no longer attempts to modify the
system PATH or registry when installing Miniconda. (#681)
- `reticulate::conda_install()` gains the `channel` argument, allowing
custom Conda channels to be used when installing Python packages.
(#443)
- `reticulate::configure_environment()` can now be used to configure a
non-Miniconda Python environment. (#682; @skeydan)
- Fixed an issue where matplotlib plots would be included using absolute
paths, which fails in non-standalone documents rendered to HTML. (#669)
- Fixed an issue where `reticulate` would attempt to flush a non-existent
stdout / stderr stream. (#584)
# reticulate 1.14
- Fixed an issue where `rmarkdown::render()` could fail when including
matplotlib plots when `knit_root_dir` is set. (#645)
- `reticulate` now scans for Conda installations within the ~/opt folder,
as per the updated installers distributed for macOS. (#661)
- Python classes can now be defined directly from R using the `PyClass()`
function. (#635; @dfalbel)
- reticulate is now compatible with Python 3.9. (#630, @skeydan)
- Pandas DataFrames with a large number of columns should now be converted to
R data.frames more quickly. (#620, @skeydan)
- Python loggers are now better behaved in the Python chunks of R Markdown
documents. (#386)
- reticulate will now attempt to bind to `python3` rather than `python`,
when no other version of Python has been explicitly requested by
e.g. `use_python()`.
- reticulate now provides R hooks for Python's `input()` and `raw_input()`
functions. It should now be possible to read user input from Python scripts
loaded by reticulate. (#610)
- `reticulate` now more consistently normalizes the paths reported by
`py_config()`. (#609)
- `reticulate` now provides a mechanism for allowing client packages to declare
their Python package dependencies. Packages should declare the Python packages
they require as part of the `Config/reticulate` field in their `DESCRIPTION` file.
Currently, this only activated when using Miniconda; as the assumption is that
users will otherwise prefer to manually manage their Python environments.
Please see `vignette("python_dependencies")` for more details.
- `reticulate` will now prompt the user to create and use a
[Miniconda](https://docs.conda.io/en/latest/miniconda.html) environment
when no other suitable Python environment has already been requested. This
should help ease some of the trouble in setting up a Python environment on
different platforms. The installer code was contributed by @hafen, from the
[rminiconda](https://github.com/hafen/rminiconda) package.
- Fixed an issue where `virtualenv_create(..., python = "")` could
fail to use the requested version of Python when `venv` is not installed.
(#399)
- Fixed an issue where iterable Python objects could not be iterated with
`iter_next()` due to a missing class. (#603)
- Fixed an issue where Conda environments could be mis-detected as
virtual environments.
- R functions wrapping Python functions now inherit the formal arguments
as specified by Python, making autocompletion more reliable.
(#573, @flying-sheep)
- Fixed an issue where attempts to query Conda for environments could fail
on Windows. (#576; #575; @dfalbel)
- Properly check for NULL keyword arguments in `call_r_function()`.
(#562, @dfalbel)
# reticulate 1.13
- Fixed an issue where subsetting with `[.python.builtin.object` could
fail when `convert = TRUE` is set on the associated Python object.
(#554)
- Fixed an issue where the wrong definition of `[[.python.builtin.object`
was being exported. (#554)
- `py_install()` now accepts `python_version`, and can be used
if a particular version of Python is required for a Conda
environment. (This argument is ignored for virtual environments.)
(#549)
- Fixed an issue where reticulate could segfault in some cases
(e.g. when using the `iterate()` function). (#551)
- It is now possible to compile `reticulate` with support for debug
versions of Python by setting the `RETICULATE_PYTHON_DEBUG` preprocessor
define during compilation. (#548)
- reticulate now warns if it did not honor the user's request to load a
particular version of Python, as through e.g. `reticulate::use_python()`.
(#545)
- `py_save_object()` and `py_load_object()` now accept `...` arguments. (#542)
- `py_install()` has been revamped, and now better detects
available Python tooling (virtualenv vs. venv vs. Conda). (#544)
- reticulate now flushes stdout / stderr after calls to `py_run_file()` and
`py_run_string()`.
- Python tuples are now converted recursively, in the same way that Python
lists are. This means that the sub-elements of the tuple will be converted
to R objects when possible. (#525, @skeydan)
- Python OrderedDict objects with non-string keys are now properly
converted to R. (#516)
- Fixed an issue where reticulate could crash after a failed attempt
to load NumPy. (#497, @ecoughlan)
# reticulate 1.12
- Fixed an issue where Python objects within Python lists would not be
converted to R objects as expected.
- Fixed an issue where single-row data.frames with row names could not
be converted. (#468)
- Fixed an issue where `reticulate` could fail to query Anaconda environment
names with Anaconda 3.7.
- Fixed an issue where vectors of R Dates were not converted correctly. (#454)
- Fixed an issue where R Dates could not be passed to Python functions. (#458)
# reticulate 1.11.1
- Fixed a failing virtual environment test on CRAN.
# reticulate 1.11
- Fixed an issue where attempts to activate virtual environments created with
virtualenv 16.4.1 would fail. (#437)
- Fixed an issue where conversion of Pandas Categorical variables to R objects
would fail. (#389)
- Textual output generated when adding items to a matplotlib plot object
are now suppressed.
- If the last statement in a Python chunk returns a matplotlib plot object,
the plot will now be auto-shown as in other environments.
- The reticulate function help handler now returns function arguments for
Python builtin functions.
- Top-level Python statements can now include leading indent when submitted
with `repl_python()`.
- The current `matplotlib` figure is now cleared as each Python chunk in an
R Markdown document is run.
- The `r` helper object (used for evaluating R code from Python) now better
handles conversion of R functions. (#383)
- The `use_virtualenv()` function now understands how to bind to virtual
environments created by the Python `venv` module.
- Reticulate better handles conversions of R lists to Python, and similarly,
Python lists to R. We now call `r_to_py()` on each sub-element of an R list,
and similarly, `py_to_r()` on each sub-element of a Python list.
- Reticulate now always converts R `Date` objects into Python `datetime`
objects. Note that these conversions can be inefficient -- if you would
prefer conversion to NumPy `datetime64` objects / arrays, you should convert
your date to `POSIXct` first.
- Python chunks containing errors will cause execution to halt if 'error=FALSE'
during render, conforming with the default knitr behavior for R chunks.
- The output of bare statements (e.g. `1 + 1`) is now emitted as output when using
the reticulate Python engine.
- Remapping of Python output streams to be R can now be explicitly enabled
by setting the environment variable `RETICULATE_REMAP_OUTPUT_STREAMS` to 1. (#335)
- Allow syntax errors in Python chunks with 'eval = FALSE' (#343)
- Avoid dropping blank lines in Python chunks (#328)
- Use "agg" matplotlib backend when running under RStudio Desktop (avoids
crashes when attempting to generate Python plots)
- Add `as.character()` S3 method for Python bytes (defaults to converting using
UTF-8 encoding)
- Add `py_main_thread_func()` for providing R callbacks to Python libraries that may
invoke the function on a Python background thread.
- Add `py_to_r` S3 methods for Scipy sparse matrices: CSR to dgRMatrix, COO to
dgTMatrix, and for all other sparse matrices, conversion via CSC/dgCMatrix.
# reticulate 1.10
- Output is now properly displayed when using the `reticulate` REPL with
Windows + Python 2.7.
- Address memory protection issues identified by rchk
- Make variables defined using `%as%` operator in `with()` available after
execution of the with block (same behavior as Python).
- Check for presence of "__module__" property before reading in `as_r_class()`
- Only update pip in `virtualenv_install()` when version is < 8.1
- Support converting Python `OrderedDict` to R
- Support for iterating all types of Python iterable
- Add `conda_python()` and `virtualenv_python()` functions for finding the
python binary associated with an environment.
# reticulate 1.9
- Detect python 3 in environments where there is no python 2 (e.g. Ubuntu 18.04)
- Always call r_to_py S3 method when converting objects from Python to R
- Handle NULL module name when determining R class for Python objects
- Convert RAW vectors to Python bytearray; Convert Python bytearray to RAW
- Use importlib for detecting modules (rather than imp) for Python >= 3.4
- Close text connection used for reading Python configuration probe
# reticulate 1.8
- `source_python()` now flushes stdout and stderr after running the associated
Python script, to ensure that `print()`-ed output is output to the console.
(#284)
- Fixed an issue where logical R matrices would not be converted correctly to
their NumPy counterpart. (#280)
- Fixed an issue where Python chunks containing multiple statements on the same
line would be evaluated and printed multiple times.
- Added `py_get_item()`, `py_set_item()`, and `py_del_item()` as lower-level
APIs for directly accessing the items of e.g. a Python dictionary or a Pandas
DataFrame.
- Fix issue with Pandas column names that clash with built in methods (e.g. 'pop')
- Improve default `str()` output for Python objects (print `__dict__` if available)
# reticulate 1.7
- Improved filtering of non-numeric characters in Python / NumPy versions.
- Added `py_func()` to wrap an R function in a Python function with the same signature as that of the original R function.
- Added support for conversion between `Matrix::dgCMatrix` objects in R and `Scipy` CSC matrices in Python.
- `source_python()` can now source a Python script from a URL into R environments.
- Always run `source_python()` in the main Python module.
- `py_install()` function for installing Python packages into virtualenvs and conda envs
- Automatically create conda environment for `conda_install()`
- Removed `delay_load` parameter from `import_from_path()`
# reticulate 1.6
- `repl_python()` function implementing a lightweight Python REPL in R.
- Support for converting Pandas objects (`Index`, `Series`, `DataFrame`)
- Support for converting Python `datetime` objects.
- `py_dict()` function to enable creation of dictionaries based on lists of
keys and values.
- Provide default base directory (e.g. '~/.virtualenvs') for environments
specified by name in `use_virtualenv()`.
- Fail when environment not found with `use_condaenv(..., required = TRUE)`
- Ensure that `use_*` python version is satisfied when using `eng_python()`
- Forward `required` argument from `use_virtualenv()` and `use_condaenv()`
- Fix leak which occurred when assigning R objects into Python containers
- Add support for Conda Forge (enabled by default) to `conda_install()`
- Added functions for managing Python virtual environments (virtualenv)
# reticulate 1.5
- Remove implicit documentation extraction for Python classes
- Add `Library\bin` to PATH on Windows to ensure Anaconda can find MKL
- New `source_python()` function for sourcing Python scripts into R
environments.
# reticulate 1.4
- Support for `RETICULATE_DUMP_STACK_TRACE` environment variable which can be set to
the number of milliseconds in which to output into stderr the call stacks
from all running threads.
- Provide hook to change target module when delay loading
- Scan for conda environments in system-level installations
- Support for miniconda environments
- Implement `eval`, `echo`, and `include` knitr chunk options for Python engine
# reticulate 1.3.1
- Bugfix: ensure single-line Python chunks that produce no output still
have source code emitted.
# reticulate 1.3
- Use existing instance of Python when reticulate is loaded within an
embedded Python environment (e.g. rpy2, rice, etc.)
- Force use of Python specified in PYTHON_SESSION_INITIALIZED (defined by rpy2)
- Define R_SESSION_INITIALIZED (used by rpy2)
- Force use of Python when `required = TRUE` in `use_python` functions
- Force use of Python specified by RETICULATE_PYTHON
- `dict`: Don't scan parent frame for Python objects if a single unnamed list
is passed.
- Wait as long as required for scheduling generator calls on the main thread
- Refine stripping of object addresses from output of `py_str()` method
- Added `py_id()` function to get globally unique ids for Python objects
- Added `py_len()` function and S3 `length()` method for Python lists (already
had `length()` methods for dicts, tuples, and NumPy arrays).
- Exported `py` object (reference to Python main module)
- Added `eng_python()` (knitr engine for Python chunks)
- Improved compatibility with strings containing high unicode characters
when running under Python 2
- Remove `dim` methods for NumPy arrays (semantics of NumPy reshaping are
different from R reshaping)
- Added `array_reshape` function for reshaping R arrays using NumPy (row-major)
semantics.
- Provide mechanism for custom R wrapper objects for Python objects
- Added interface to pickle (`py_save_object()` and `py_load_object()`)
- Catch and print errors which occur in generator functions
- Write using Rprintf when providing custom Python output streams
(enables correct handling of terminal control characters)
- Implement `isatty` when providing custom Python output streams
# reticulate 1.2
- Add `np_array` function for creating NumPy arrays and converting the data type,
dimensions, and in-memory ordering of existing NumPy arrays.
- Add `dim` and `length` functions for NumPy arrays
- Add `py_set_seed` function for setting Python and NumPy random seeds.
- Search in additional locations for Anaconda on Linux/Mac
- Improved support for UTF-8 conversions (always use UTF-8 when converting from
Python to R)
- Ignore private ("_" prefixed) attributes of dictionaries for .DollarNames
- Provide "`function`" rather than "function" in completions.
- Fail gracefully if call to conda in `conda_list` results in an error
- Add `pip_ignore_installed` option to `conda_install` function.
# reticulate 1.1
- Allow `dict()` function to accept keys with mixed alpha/numeric characters
- Use `conda_list()` to discover conda environments on Windows (slower but
much more reliable than scanning the filesystem)
- Add interface for registering F1 help handlers for Python modules
- Provide virtual/conda env hint mechanism for delay loaded imports
# reticulate 1.0
- Search WORKON_HOME (used by virtualenv_wrapper) for Python environments
- Support `priority` field for delay loaded modules.
- Use json output from conda_list (handle spaces in path of conda env)
- Look for callable before iterable when converting Python objects to R
- Correct propagation of errors in R functions called from Python
- Support for generators (creating Python iterators from R functions)
- Changed default `completed` value for `iter_next()` to `NULL` (was `NA`)
- Support for converting 16-bit floats (NPY_HALF) to R
- Don't throw error when probing Python <= 2.6
- Copy Python dictionary before converting to R named list (fixes issue
with dictionaries that are mutated during iteration, e.g. sys.modules)
- Ensure that existing warning filters aren't reset by py_suppress_warnings
# reticulate 0.9
- Detect older versions of Anaconda during registry scanning.
- Don't probe python versions on windows when no executable is found
- Poll for interrupts every 500ms rather than 100ms
- Provide sys.stdout and sys.stderr when they are None (e.g. in R GUI)
- Add Scripts directory to PATH on Windows
- Add iter_next function for element-by-element access to iterators
- Eliminate special print method for iterators/generators
- Added `py_help()` function for printing documentation on Python objects
- Added `conda_version()` function.
- Search `dict()` parent frames for symbols; only use symbols which inherit
from python.builtin.object as keys.
# reticulate 0.8
- Add `import_from_path()` function for importing Python modules from
the filesystem.
- Add `py_discover_config()` function to determine which versions of Python
will be discovered and which one will be used by reticulate.
- Add `py_function_docs()` amd `py_function_wrapper()` utility functions for
scaffolding R wrappers for Python functions.
- Add `py_last_error()` function for retrieving last Python error.
- Convert 0-dimension NumPy arrays (scalars) to single element R vectors
- Convert "callable" Python objects to R functions
- Automatically add Python bin directory to system PATH for consistent
version usage in reticulate and calls to system
- Added `length()` method for tuple objects
- Enable specification of `__name__` for R functions converted to
Python functions.
- Give priority to the first registered delay load module (previously
the last registered module was given priority)
- Add additional safety checks to detect use of NULL xptr objects
(i.e. objects from a previous session). This should mean that S3
methods no longer need to check whether they are handling an xptr.
- Added `py_eval()` function for evaluating simple Python statements.
- Add `local` option to `py_run_string()` and `py_run_file()`. Modify
behavior to return local execution dictionary (rather than a reference
to the main module).
- Use `PyImport_Import` rather than `PyImport_ImportModule` for `import()`
- Added ability to customize mapping of Python classes to R classes via
the `as` argument to `import()` and the `register_class_filter()` function
- Added separate `on_load` and `on_error` functions for `delay_load`
- Scan customary root directories for virtualenv installations
- Allow calling `__getitem__` via `[[` operator (zero-based to match
Python style indexing)
- Added `conda_*` family of functions for using conda utilities from
within R.
- Implement comparison operators (e.g. `==`, `>=`, etc.) for Python objects
- Implement `names()` generic for Python objects
- Improve performance for marshalling of large Python dictionaries and
iterators that return large numbers of items.
- Implement `str` methods for Python List, Dict, and Tuple (to prevent
printing of very large collections via default `str` method)
- Use `grepl()` rather than `endsWith()` for compatibility with R <= 3.2
- Use `inspect.getmro` rather than `__bases__` for enumerating the base classes
of Python objects.
- Fix `PROTECT`/`UNPROTECT` issue detected by CRAN
- Correct conversion of strings with Unicode characters on Windows
- Fix incompatibility with system-wide Python installations on Windows
- Fix issue with Python dictionary keys that shared names with
primitive R functions (don't check environment inheritance chain
when looking for dictionary key objects by name).
- Propagate `convert` parameter for modules with `delay_load`
# reticulate 0.7
- Initial CRAN release