Modern Python Environments for Development

Anik DasAnik Das
6 min read

Python installation is often the starting point for many, and it's usually done by downloading Python from the official website, python.org. This is how most of us embark on our Python journey. However, it's worth noting that Python versions are frequently updated. For example, if you're currently working with Python 3.11.5, what happens when a new Python version becomes available in a few months? Do you simply download and install the new version? And what becomes of the code you've written in the earlier version?

Another crucial aspect of Python development is dependency management. Consider a scenario where you're working on a project that relies on a third-party package like Django, a popular web framework. You've used pip to install this package. However, as time goes by, a new version of Django is released, and you'll likely want to update it at some point. But here's the catch – updating Django can potentially break your existing project.

These situations are just a glimpse of the challenges that can arise when dealing with Python versions and dependencies. Thankfully, there are several tools available to simplify the process of managing dependencies and versions, making your Python development experience smoother and more efficient.

In this article, I will introduce you to some indispensable tools that I use daily for efficient version and dependency management. These tools address two critical challenges:

  1. Installing and Switching Between Different Python Versions on the Same Machine:

    We'll explore how to seamlessly manage various Python versions coexisting on your system.

  2. Managing Dependencies and Virtual Environments:

    I'll show you how to maintain clean and isolated project environments, ensuring that your dependencies remain organized and your projects run smoothly.

Pyenv

Indeed, Pyenv is a powerful tool for simplifying the installation and management of various Python versions on the same machine. It helps keep your system's Python version intact, which is essential for the proper functioning of certain operating systems. Pyenv allows you to effortlessly switch between Python versions according to the specific needs of your projects.

It's worth noting that while the original pyenv is primarily designed for Linux systems, for Windows users, there's an alternative called "pyenv-win" that serves a similar purpose, enabling you to manage Python versions effectively on Windows-based systems.

Once you have Pyenv installed, you can update the cached version database. This database contains a list of available Python versions that you can install using Pyenv. Updating this database ensures that you have access to the latest versions and information about the Python releases.

*To update the cached version database in Pyenv, you can use the following command:

pyenv update

:: [Info] ::  Mirror: https://www.python.org/ftp/python
:: [Info] ::  Scanned 200 pages and found 623 installers.

Running this command will refresh the list of available Python versions, including any new releases or updates. It's a good practice to periodically update this database to stay informed about the latest Python versions and maintain compatibility with your projects.

*To install a specific version of Python, you can use the pyenv install command followed by the desired version number. For example, to install Python 3.11.3, you would run:

pyenv install 3.11.3
pyenv install 3.11.4
pyenv install 3.11.5

pyenv versions
  3.11.3
  3.11.4 
  3.11.5

*To see a list of Python versions that you have installed, you can use the pyenv versions command:

pyenv versions
  3.11.3
  3.11.4 
  3.11.5

This command will display all the installed Python versions on your system.

*To set a global Python version for your system using the pyenv global command. This version will be used by default for any new terminal sessions. For example, to set Python 3.11.4 as the global version, you can run:

pyenv global 3.11.4

*To specify a Python version for a specific project or directory using the pyenv local command. This allows you to use different Python versions for different projects. For instance, if you want to use Python 3.11.5 for a specific project folder, navigate to that folder and run:

pyenv local 3.11.5

Certainly, for more detailed information and advanced usage of Pyenv, it's highly recommended to consult the official documentation. The Pyenv documentation provides comprehensive guidance on installation, configuration, and usage, including various advanced features and options. You can find the official Pyenv documentation at the following URL:

Pyenv Documentation

Referencing the documentation is a great way to explore all the capabilities Pyenv offers and to ensure you're using it effectively for your specific development needs.

Pipenv

Pipenv is a popular Python tool that simplifies the management of project dependencies and virtual environments. It was created to address some common issues with dependency management in Python and to provide a more streamlined workflow for developers. Here are some key features and concepts associated with Pipenv:

  1. Creating a New Project: To initiate a new Python project using Pipenv, follow these steps:

     $ mkdir test-project
     $ cd test-project
     $ pipenv --python 3.11.4
    

    This sequence of commands does the following:

    • Creates a new directory for your project (test-project).

    • Navigate into the project directory.

    • Set up a virtual environment with Python version 3.11.4 for your project.

Pipenv also generates a Pipfile to manage dependencies.

  1. Pipfile: It defines your project's dependencies and specifies the Python version required for your project. Here's a simplified example of a Pipfile:

     [[source]]
     url = "https://pypi.org/simple"
     verify_ssl = true
     name = "pypi"
    
     [packages]
    
     [dev-packages]
    
     [requires]
     python_version = "3.11"
    
  2. Installing Dependencies: You can use Pipenv to install project dependencies. Use the following command:

     $ pipenv install [--dev] <package name>
    
    • The --dev flag indicates that the dependency is intended for development purposes only. Development dependencies are not installed by default.

    • For instance, to install Django as a dependency, you can run:

        $ pipenv install django
      

Pipenv will download and install Flask within the project's virtual environment and update the Pipfile and Pipfile.lock to reflect the new dependency.

  1. Running Scripts: To execute scripts within the virtual environment managed by Pipenv, you should use the pipenv run command. For instance, to run tests with pytest, you can use:

     $ pipenv run python -m pytest
    

    This ensures that the script is executed within the context of the project's virtual environment, where all the dependencies are available.

In summary, Pipenv provides a straightforward way to create Python projects, manage dependencies, and work within isolated virtual environments.

The choice of development tools often comes down to personal preference and the specific needs of a project. What's most important is that you're comfortable and proficient with the tools you choose to use. Being knowledgeable about your chosen tools and understanding how to use them effectively is key to successful software development.

Whether you prefer Pipenv, Poetry, virtualenv, Conda, or any other tool, investing time in learning and mastering the tool can greatly enhance your productivity and the quality of your code. Additionally, staying up-to-date with best practices and updates related to your chosen tools is a valuable part of being a proficient developer.

Ultimately, the best tool is the one that helps you achieve your goals efficiently and effectively while maintaining code quality and project stability. Your familiarity and expertise with the tool play a significant role in your development workflow and overall success as a developer.

2
Subscribe to my newsletter

Read articles from Anik Das directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Anik Das
Anik Das

Computer engineer, backend developer, DevOps pro. Simplifying tech complexities in my blog. Join the journey!