RStudio Connect offers a flexible way of deploying Python APIs, web apps such as Dash and Streamlit, Jupyter Notebooks, and reticulated R content against a variety of Python versions.
A compatible version of Python is identified when content is deployed. That Python installation is used any time Python is needed for that content. Package installation and rendering content that utilized Python will use the version of Python discovered at deploy-time.
RStudio Connect allows different content to rely on different versions of Python. For example, Alice's Flask API may require version 3.7.4 of Python while Bob's Shiny application with reticulate needs Python version 3.8.1. Those two deployments using different Python versions can coexist in RStudio Connect without conflict.
This chapter discusses how to install Python, how RStudio Connect can be configured to support one or more versions of Python, how Python version compatibility is determined, and other configuration settings relevant to Python support in RStudio Connect.
Available Python installations are analyzed at startup. RStudio Connect logs the provided Python versions and whether it can use each installation.
Changing any of the configuration items discussed in this chapter requires a restart of RStudio Connect.
Each Python installation is required to have the
pip package installed.
venv module is used to create content-specific
pip is used to install Python packages.
Additionally, Python APIs and web apps built on
WSGI require the
package to be installed on your OS.
On CentOS * and Red Hat Enterprise Linux:
sudo yum install libev-devel
sudo apt install libev-dev
sudo zypper install libev-devel
Enabling Python Support#
Python support can enabled by setting the
Python.Enabled property to
true. Note that it is
false by default.
; /etc/rstudio-connect/rstudio-connect.gcfg [Python] Enabled = true
RStudio Connect also needs to be configured to use a specific Python installation in order to fully support Python content.
property is used to specify locations for Python installations. Specify
this property once for each Python installation directory.
; /etc/rstudio-connect/rstudio-connect.gcfg [Python] Enabled = true Executable = /shared/Python/3.7.6/bin/python3 Executable = /shared/Python/3.8.1/bin/python3
Python.Executable property is permitted to be a symbolic link to a Python installation.
The minimum Python version supported is
See Installing Python to learn how to install Python.
We do not recommend installing Python with a package manager like
Once you have Python installed on the server, it is important to understand how Connect discovers Python and chooses the Python version that an asset will use. Python Version Matching explains more about this process.
We strongly recommend supporting multiple versions of Python instead of upgrading and maintaining a single version of Python. Supporting multiple versions of Python is the best way to ensure applications or reports published with specific package dependencies will continue to run.
After installing another Python version:
Add an additional
Python.Executableproperty to the configuration file that points to the newly built Python installation.
Following an upgrade, content dependent on Python will be rebuilt on-demand. For example, during the next execution of a scheduled Jupyter Notebook, RStudio Connect will automatically reinstall and rebuild all of the necessary packages before rendering the report, if needed. During the package updates, RStudio Connect will present a message and spinner indicating to the end user that the rendered Jupyter Notebook will be available after the packages are successfully installed and built for the new version of Python.
You can proactively rebuild all Python or R content using the
utility provided with RStudio Connect. See the Appendix
for more information. For a more selective approach to rebuilding, you can use the
rsconnect-python command line utility
to filter content items and schedule them for rebuilding.
Not all packages can be reinstalled and rebuilt on newer versions of Python. Rebuilding and restoring packages can take a significant amount of time and could delay or prevent the rendering of a Jupyter Notebook or reticulated R content.
Python Version Matching#
RStudio Connect attempts to find a Python installation that is appropriate for your content. By default, it applies a "major-minor" matching approach. This algorithm attempts to find a version of Python to use with your content. More deployments will succeed but not always with the same version of Python that is used by the author.
If you would prefer a strict association between authored and deployed Python versions, you can choose to use an "exact" matching approach.
The "major-minor" algorithm requires exact
MAJOR.MINOR matching but is
flexible about the patch level. This is a useful option when your desktop and
server may occasionally have different update cycles when installing bug fix
releases. For example, if content was deployed with Python 3.5.0 and RStudio
Connect is configured with Python 3.5.3, then Python 3.5.3 will be used as the
MAJOR.MINOR numbers match (
3.5) but if RStudio Connect is
configured with only Python 3.7.4 then the content will fail to deploy as the
MAJOR.MINOR versions are different (
An inconsistent version of Python occasionally causes problems when installing package dependencies. For the best results, make sure that RStudio Connect has access to the same versions of Python used to author content.
The Python version matching approach is controlled with the
Find a Python installation with an exact
MAJOR.MINORversion match that is close to the version used when authoring the content. If a compatible version cannot be found, content will fail to deploy.
Use exact version match.
If there are matching
MAJOR.MINORreleases, use least-greater version.
If there are matching
MAJOR.MINORreleases, use latest of these.
Finds a Python installation that exactly matches the version of Python used when authoring the content. If a matching version cannot be found, content will fail to deploy.
The table below shows some examples of how the matching algorithm takes the version of Python used in your development environment and chooses an appropriate Python version from the ones available to RStudio Connect.
|Matching Algorithm||Development Version||Server Versions||Used Version||Reason|
||3.5.6||3.5.4, 3.5.6, 3.5.9||3.5.6||Chose exact match|
||3.7.3||3.7.1, 3.7.5, 3.7.6||3.7.5||Chose lowest 3.7.X release after 3.7.3|
||3.6.10||3.6.4, 3.6.9, 3.7.2||3.6.9||Chose the latest 3.6.X release since all are before 3.6.10|
||3.5.6||3.5.6, 3.5.7||3.5.6||Chose exact match|
||3.5.6||3.5.4, 3.5.7||error||no match|