Which version of Python should I use? Now, that’s a loaded question. While the answer is simple, the explanation is more complicated.
- Use the latest version of Python 3.
- Use the CPython implementation.
- Use venv or virtualenv to manage multiple installations.
- Use PyCharm or PyDev as the IDE.
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. At the time of writing this article, the current versions of Python are 3.6 and 2.7.
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.
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.
|Python for .NET||
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.
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. My recommendation is to use venv if you use Python 3 exclusively and use virtualenv for switching between Python 2 and 3.
After setting up your Python environment, you are ready to start programming! While you could use a simple text editor like Notepad++, I highly recommend an IDE like JetBrains PyCharm, PyDev for Eclipse, or Eric. IDEs provide rich development support, especially for larger apps that use frameworks like Django. 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. PyDev and Eric, on the other hand, are totally free and open source.
This article is dedicated to my good friend Sudarsan, who recently asked me the question in the title.