Skip to content

Python Development Environment

Steven Anaya edited this page Jul 17, 2019 · 7 revisions

Assumptions

  • BEE selects Python 3.6.8 as minimum supported version. Note some of the following instructions are for Python 3.7 but the team has decided to use 3.6.8 to support RHEL systems.

  • We don't need multiple versions of Python 3 on our development machines. Testing against Python versions should happen in our CI/CD environment. So, no need for pyenv, although it can help to catch backwards-compatibility issues early.

  • Those of us on Macs may have a problem with Homebrew and so can't rely on that.

  • In any case, we must have Python 3.7+ (python3) installed somewhere on our development machines (and on your PATH). That comes with pip3 and the venv module (which is probably required by pipenv). How you get this installed on a Mac without a working Homebrew is an exercise for the user.

  • BEE will use pipenv to manage a virtual development environment and our dev/prod Python package requirements.

Initial Setup

Assuming that pipenv couldn't be installed by Homebrew you'll need to install it locally (--user) using Pip:

> pip3 install pipenv --user

You'll need to be careful here. Depending on how you installed Python 3, this command will install pipenv but it may not end up in your PATH (because it's a binary or script). If that's the case, you'll see a message telling you where it is and that you should put it in your PATH. This may be the best approach. In your shell's startup file:

# So we can find xxx binaries or scripts installed with pip3 install xxx --user
# Assumes we have Python installed as python3
export PY_USER_BIN=$(python3 -c 'import site; print(site.USER_BASE + "/bin")')
export PATH=$PY_USER_BIN:$PATH

By default, pipenv creates the project's virtual environment in a centralized location (e.g. ~/.local/share/virtualenvs/) and maps that to the project's directory. It may be preferable to locate the virtual environment with the project (in case you change directory names). Setting PIPENV_VENV_IN_PROJECT=1 in you shell startup file will force pipenv to place the environment in the projects's directory as a .venv directory.

# So pipenv puts virtual environment directory in project directory.
export PIPENV_VENV_IN_PROJECT=1

Now you can create your initial environment:

> pipenv --three      # or /path/to/pipenv if you don't want to put it in your PATH

This will create the starting environment using the most recent version of Python 3 that is already installed on your system (and on your PATH). pipenv will not download and install Python for you. Now you can activate the new environment and work in a shell there:

> pipenv shell        # or /path/to/pipenv if you don't want to put it in your PATH
(envdir) > 

ADD PIPENV INSTALL DEV/PROD INSTRUCTIONS HERE

When finished, exit the environment shell:

(envdir) > exit
>