Skip to content

Latest commit

 

History

History
194 lines (145 loc) · 5.96 KB

MAC_SETUP.md

File metadata and controls

194 lines (145 loc) · 5.96 KB

Setting up a Mac development environment with pyenv and pyenv-virtualenv

In this guide, you'll set up a local Python development environment with multiple Python versions, managed by pyenv.

This guide differs from the Google Cloud Python development instructions because developers of samples and libraries need to be able to use multiple versions of Python to test their code.

Before you begin

  1. Install homebrew if you do not already have it.

    Note: If you are running Catalina (MacOS 10.15.x), ensure that you have a compatible version of Homebrew (2.1.13 or later). Running brew update on Catalina does not always result in a compatible version, so uninstall and reinstall homebrew, if necessary

Installing pyenv and pyenv-virtualenv

  1. Install pyenv.

    brew update
    brew install pyenv
  2. Install the pyenv-virtualenv plugin.

    brew install pyenv-virtualenv
  3. Append the following to your ~/.bashrc:

    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    

    Note: This also works with ZSH.

  4. Reload your shell.

    source ~/.bashrc

Installing multiple Python versions

  1. See the available Python versions with pyenv.

    pyenv install --list

    Note: The Python versions are at the top of the long list. If the Python version you want isn't listed, you may need to upgrade your pyenv with homebrew.

    brew update
    brew upgrade pyenv
  2. Install the necessary Python versions with pyenv. Use the latest release of the versions you wish to test against. A list of available versions is available on python.org

    As of April 28, 2022, the latest Python versions are:

    • 3.6.13 (latest 3.6.x release)
    $ pyenv install 3.6.13
    • 3.7.16 (latest 3.7.x release)
    $ pyenv install 3.7.16
    • 3.8.16 (latest 3.8.x release)
    $ pyenv install 3.8.16
    • 3.9.16 (latest 3.9.x release)
    $ pyenv install 3.9.16
    • 3.10.9 (latest 3.10.x release)
    $ pyenv install 3.10.9
    • 3.11.1 (latest 3.11.x release)
    $ pyenv install 3.11.1

    ℹ️ Note: If you are using an M1 Mac, certain versions of Python will not properly install with pyenv due to incompatibilities with clang. Python 3.6.13, 3.7.13, and 3.8.13 will work, but earlier patches Python 3.6, Python 3.7, and Python 3.8 may not.

    ℹ️ Note: If you are getting errors installing a python version, try setting up the SDKROOT environment variable.

    # You can add this to your .bashrc file.
    export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
  3. After you have installed a python version through pyenv, verify that you are now using the pyenv Python shim.

    $ which python
    ~/.pyenv/shims/python

Managing python versions using Pyenv global

Pyenv allows you to configure the priority order for your python installs.

pyenv global 3.8.5 3.7.8 3.6.11 3.5.9 2.7.18

This will make python and python3 point to Python 3.8.5. python2 will use 2.7.18. You can also further specify versions, such as python3.6 to use that version.

Python virtual environments

Using Virtual Environments prevents inadvertent modifications to your global python install. Once created and sourced, calls to python will use this virtual environment, not a global python install. Each virtual environment can have its own set of packages that can be different from others.

Using Python 3+ venv

Python has builtin support for creating virtual environments, accessible by running the venv module.

cd python-docs-samples
python -m venv [venv-name]
source [venv-name]/bin/activate

Typically you will name the venv venv, or venv38 for a python 3.8 venv.

Using pyenv-virtualenv

You can also use an extension for pyenv that will assist in managing virtual environments. This allows you to use pyenv local to automatically use the created virtual environment. You can install this by running $ brew install pyenv-virtualenv

  1. Change to the desired source directory.

    cd ~/src/python-docs-samples	
  2. Create a virtualenv for python 3.8.5 using pyenv virtualenv.

    pyenv virtualenv 3.8.5 python-docs-samples	

    This creates a virtualenv folder within ~/.pyenv/versions/.

  3. Set the local Python version(s) with pyenv local

    # pyenv local [name of virtualenv] [list of python versions to use]	
    pyenv local python-docs-samples 3.8.5 3.7.8 3.6.11 3.5.9 2.7.18	
  4. Now, when you cd into the source directory or a subdirectory within it, pyenv will make your virtualenv the default Python. Since you specified more than one version, it will also add binaries like python36 and python27 to your PATH, which nox uses when picking Python interpreters.

  5. Add .python-version to your global gitignore file, so it won't be committed into the repository.

More on authoring samples

If you are looking for more information on how to author samples, please view the Authoring Guide