Virtual Environments
Virtual environments promote code reproducibility by letting you let you specify project-specific versions of packages. They accomplish this by making it easy to take a snapshot of the version of packages used in a project and restore that snapshot on other computers. They also make it easy to switch between snapshots on a single computer as you switch between projects.
This guide describes the motivation for using virtual environments and walks through how to set one up for projects at Urban that use R and/or Python.