2023-03-31

Python Version Management with Pyenv

What is Pyenv

Pyenv is an open-source Python version management tool that enables developers to easily install and switch between different Python versions on a per-project basis. It offers a simple, yet robust command-line interface to manage Python versions, and supports integration with virtual environment tools like virtualenv and venv.

With Pyenv, you can effortlessly maintain multiple Python versions, create isolated development environments, and ensure that your projects are running on the correct Python interpreter. By mastering Pyenv, you'll be able to streamline your development workflow, improve collaboration, and make your Python projects more reliable and maintainable.

Getting Started with Pyenv

Installation

Before using Pyenv, you need to install it on your system. The installation process varies depending on your operating system:

  • macOS
    You can install Pyenv using Homebrew with the following command:
bash
$ brew install pyenv
  • Ubuntu/Linux
    Use the Pyenv installer script to install the tool:
bash
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  • Windows
    Pyenv is not officially supported on Windows. However, you can use the pyenv-win fork, which provides similar functionality. Install it using the following command:
bash
$ pip install pyenv-win --target %USERPROFILE%\\.pyenv

After installing Pyenv, you need to add it to your shell's startup script (e.g., .bashrc, .zshrc, or .bash_profile), so that it is available every time you open a terminal. Add the following lines to your shell configuration file:

bash
$ export PYENV_ROOT="$HOME/.pyenv"
$ export PATH="$PYENV_ROOT/bin:$PATH"
$ eval "$(pyenv init --path)"

Restart your shell, and you should now have access to the pyenv command.

Basic Commands

Here are some essential Pyenv commands to get you started:

  • pyenv versions
    Lists all the installed Python versions on your system.

  • pyenv install -l
    Lists all available Python versions you can install.

  • pyenv global <version>
    Sets the global Python version for your system.

  • pyenv local <version>
    Sets the local Python version for the current directory.

  • pyenv shell <version>
    Sets the Python version for the current shell session.

  • pyenv uninstall <version>
    Uninstalls a specific Python version.

Using Pyenv with Virtual Environments

Virtual environments are a key component of Python development, as they allow you to create isolated environments for each project, ensuring that dependencies and Python versions do not interfere with each other. Pyenv can be used in conjunction with virtual environment tools like virtualenv and venv.

You can create a new virtual environment using your desired Python version with the following command:

bash
$ python -m venv <env_name>

Replace <env_name> with your preferred name for the virtual environment.

To activate the virtual environment, run the following command:

  • macOS/Linux: source <env_name>/bin/activate
  • Windows: <env_name>\Scripts\activate

With the virtual environment activated, you can now install packages and run your Python projects using the specified Python version. To deactivate the virtual environment, simply run the deactivate command.

bash
$ deactivate

Managing Python Versions

Installing Multiple Python Versions

To install a specific Python version using Pyenv, you can use the following command:

bash
$ pyenv install <version>

Replace <version> with the desired Python version number (e.g., 3.9.6). You can find the list of available Python versions by running pyenv install -l. Once the installation is complete, the new Python version will be available for use with Pyenv.

Switching Between Python Versions

Pyenv allows you to switch between installed Python versions effortlessly. There are three primary scopes for setting Python versions: global, local, and shell.

Global

The global Python version is used as the default for your system. You can set the global version using the following command:

bash
$ pyenv global <version>

Replace <version> with the desired Python version number.

Local

The local Python version is set on a per-directory basis. It takes precedence over the global version when you're inside that directory. To set a local version, navigate to your project directory and run:

bash
$ pyenv local <version>

Replace <version> with the desired Python version number. This will create a .python-version file in the current directory, which Pyenv uses to determine the local Python version.

Shell

The shell Python version is set on a per-shell-session basis. It takes precedence over both global and local versions. To set a shell version, run:

bash
$ pyenv shell <version>

Replace <version> with the desired Python version number. The shell version will persist only for the current shell session.

Setting System and User Python Versions

You can set system-wide and user-specific Python versions using the global and local scopes, respectively.

  • System-wide
    To set a system-wide Python version, use the pyenv global command as mentioned in the previous section.

  • User-specific
    To set a user-specific Python version, navigate to the user's home directory and use the pyenv local command. This will create a .python-version file in the user's home directory, which will be used by Pyenv to determine the user-specific Python version.

Understanding Global, Local, and Shell Scopes

It's important to understand the precedence of global, local, and shell scopes when working with Pyenv. The precedence order is as follows:

  • Shell scope
    If a shell version is set, it takes precedence over the other scopes.

  • Local scope
    If a local version is set and no shell version is set, the local version is used.

  • Global scope
    If neither shell nor local versions are set, the global version is used.

By using these different scopes, you can easily manage Python versions on a per-project, per-user, or system-wide basis, ensuring that your projects use the correct Python interpreter and avoiding conflicts between projects with different version requirements.

References

https://realpython.com/intro-to-pyenv/
https://github.com/pyenv/pyenv
https://fathomtech.io/blog/python-environments-with-pyenv-and-vitualenv/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!