Python 2 is going away! It’s time to upgrade. 🐍3️⃣
You shouldn’t run anything in prod that’s not actively supported. If there are security flaws you won’t have a sure path to remediation. Start the upgrade now so you have time to finish before support ends.
In DevOps you’re not usually writing much raw Python. A helper lambda function. A little boto3 script. If you’re writing lots of code, you’re probably making a mistake and you should be looking for an existing tool that already implements whatever you’re doing (terraform, troposphere, Ansible, Salt, paramiko, whatever).
Because of that, migrating DevOps code to Python 3 is usually easy. There are guides and a conversion tool. I usually just switch my interpreter to 3 and fix errors until there aren’t any more. A few old features have been replaced with new ones that are worth adopting. Here are highlights from the easy migrations I’ve done (keep reading for the one that wasn’t easy):
- Virtual environments are now in core as
venv. You don’t need to install
basestringwas replaced with
- Use the
print()function instead of the
ConfigParserwas renamed to
configparser(to match the Python convention).
mockis now in core as
- The new f-strings are awesome.
format()and the other string formatters still work, so f-strings aren’t a migration requirement, but they make cleaner code and I recommend switching to them.
Like always, lint your code before you run it!
One migration I got into wasn’t simple: I’d bodged together a script from snippets of a library that used Python 2 sockets to implement ping so I could watch the gears turn inside the black boxes of AWS Security Groups. I got into the weeds of unicode and not-unicode strings and then decided to just live with Python 2.
If that story reminded you of any of your own code, I recommend you don’t try to migrate that code. Look for a tool that already implements whatever you’re trying to do, find a way not to need to do whatever you were doing, something. In my case, that script wasn’t part of delivering product. I was just hacking around. I finished my experiments and deleted the script.
Check out these related posts: