Which version of Python should I use? Now, that’s a loaded question. While the answer is simple, the explanation is more complicated.
tl;dr
For most people:
- Use the latest version of Python 3.
- Use the CPython implementation.
- Use pipenv to manage packages and installations.
- Use Visual Studio Code or PyCharm for editing code.
Which Version?
Python 2 and Python 3 are actually slightly different languages. The differences go deeper than just print statements. The What’s New in Python page on the official doc site lists all the gory details, and decent articles showcasing differences can be found here, here, and here. Although Python 3 is newer, Python 2 remains prevalent. Most popular packages use Python packaging tools to support both versions.
The Python Wiki makes it clear that Python 3 is the better choice:
Python 2.x is legacy, Python 3.x is the present and future of the language
Furthermore, Python 2 will reach end-of-life in 2020. The Python team will continue to provide bug fixes for 2.7 until 2020 (PEP 373), but there will be no new language features and no 2.8 (PEP 404). (Originally, end-of-life was planned for 2015, but it was pushed back by 5 years.) There is even a Python 2.7 Countdown clock online.
Which Implementation?
In purest terms, “Python” is a language specification. An implementation provides the language processing tools (compiler, interpreter, etc.) to run Python programs. The Hitchhiker’s Guide to Python has a great article entitled Picking an Interpreter that provides a good summary of available interpreters. Others are listed on python.org and the Python Wiki. The table below provides a quick overview of the big ones.
Implementation | Points |
CPython |
|
PyPy |
|
Jython |
|
IronPython |
|
Python for .NET |
|
Stackless Python |
|
MicroPython |
|
Unless you have a very specific reason, just use CPython. In fact, most people are referring to CPython when they say “Python.” CPython has the most compatibility, the widest package library, and the richest support. If you really need speed, consider PyPy.
Managing Installations
pip is the standard tool for installing Python packages. The simplest way to install Python is to install it “globally” for the system. In fact, some operating systems like macOS and Ubuntu have Python pre-installed. However, global installation has limitations:
- You may want to develop packages for both versions 2 and 3.
- You may not have permissions to add new packages globally.
- Different projects may require different versions of packages.
These problems can be solved by using “virtual” environments. A virtual environment is like a local Python installation with a specific package set. For example, I have created virtual environments for Python as part of Jenkins build jobs, since I did not have permission to install special automation packages globally on the Jenkins slaves.
The standard virtual environment tool for Python is venv, which has been packaged with (C)Python since 3.3. (venv had a command line wrapper named pyvenv, but this was deprecated in 3.6.) Another older but still popular third-party tool is virtualenv. As explained in this Reddit post, venv is the Python-sanctioned replacement for virtualenv. However, virtualenv supports Python 2, whereas venv does not. Conda is an environment manager popular with the science and data communities, and it can support other languages in addition to Python.
That being said, there is a relatively new package manager taking the Python world by storm: pipenv. Pipenv combines pip, Pipfile, and virtualenv into an easy workflow with simple commands. Personally, I find it to be very helpful. However, it has caused some controversy (see Reddit), and it may not be applicable for all scenarios (see Chris Warrick’s article). My recommendation is to use pipenv for new projects if it meets your needs.
Editors and IDEs
After setting up your Python environment, you are ready to start programming! There are two routes to take for text editing: source code editors and integrated development environments.
Source code editors are lightweight but often include basics like syntax highlighting and basic auto-completion. They’re great for quick edits and light scripting. Many have plugins. Popular choices are Visual Studio Code, Sublime, Atom, and Notepad++. My current favorite is Visual Studio Code because the Python extensions are stellar and settings are simple – just remember to install the extensions you need! I use it personally for Django development.
For more intense development, I highly recommend an IDE like JetBrains PyCharm, PyDev for Eclipse, Wing Python IDE, or Eric. IDEs provide rich development support, especially for larger apps that use frameworks like Django, Pyramid, and SQLAlchemy. They also make testing easier with plugins for test frameworks like pytest, behave, and others. PyCharm and PyDev are particularly nice because they can integrate into their larger IDEs (IntelliJ IDEA and Eclipse, respectively) to handle more languages. Personally, I prefer PyCharm, but advanced features require a paid license.
Pythonese
The Python community throws around a few terms you should know:
Word or Phrase | Meaning |
Pythonic |
|
Pythonista |
|
Pythoneer |
|
The Zen of Python |
|
The Python Software Foundation (PSF) |
|
PyCon |
|
Benevolent Dictator for Life (BDFL) |
|
[8/6/2018: I updated the recommendations for editors and IDEs.]
[8/15/2018: I added the Pythonese section.]
[8/17/2018: I updated pipenv information.]
This article is dedicated to my good friend Sudarsan,
who originally asked me the question in the title.
Thank you Andy. For the detailed analysis. Excellant analysis. Thanks for your time.
LikeLike