The following section covers Python related setup for development and how to ensure that your code would be deployable.
Homebrew is package manager for Macs which makes installing lots of different software like Git, Ruby, and Node simpler. Homebrew lets you avoid possible security problems associated with using the sudo command to install software like Node. Note this is only compatible with MacOS.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
You’ll see messages in the Terminal explaining what you need to do to complete the installation process. You can learn more about Homebrew at the Homebrew website.
For local development never install packages or modify your system Python installation. To be able to install new or updated Python versions, use pyenv. Note this is only compatible with MacOS or Linux.
brew update brew install pyenv # Use Homebrew's directories rather than ~/.pyenv echo 'export PYENV_ROOT="/usr/local/var/pyenv"' >> ~/.bash_profile # Enable shims and autocompletion echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile source ~/.bash_profile # Check pyenv has been properly installed and configured pyenv versions
pyenv, install the necessary version for development. For example, we use Python 3.8.5 for development. For legacy projects, use Python 2.7.13
pyenv install 3.8.5 pyenv install 2.7.13 pyenv global 2.7.13 3.8.5 # Check versions have been installed and assigned to global pyenv versions
To make development and deployment easier, pipenv is used to manage virtual environments and lock dependencies.
The environment variable ensures that virtual environments are created within each project folder. The main reason is for convenience as
Visual Studio Code automatically detects and switches virtual environments if
.venv is found within the folder.
brew update brew install pipenv echo 'export PIPENV_VENV_IN_PROJECT=1' >> ~/.bash_profile source ~/.bash_profile
cd path/to/project pipenv --python 3.8.5 pipenv install <new_package>
Do remember to check in the generated/updated
Pipfile.lock to be able to have reproducible builds in production.