Python originally started as Python version 2, also known as "Legacy Edition". The last version of Python2 was Python2.7, which was discontinued in 2020. Python 3.x was introduced as a replacement with numerous improvements and bug fixes compared to the Python 2.x version. Older legacy versions of Python are LTS software, which means it has long-term support. However, Python 3.x versions are backwards-incompatible versions, making it necessary to upgrade your Python 2 codebase to Python 3 to fully enjoy Python 3 ease of use and support. The biggest reasons for developers to upgrade to Python 3 can be cited as a) developer productivity (since it is dynamically typed, it is very easy to learn and code) and b) performance improvements, including faster performance on most tasks.
Rewrite the code base in Python 3
Using the porting process
This method of upgrading the code base is only useful when building software on a small scale. This is because anyone upgrading a codebase needs to have a general understanding of how the entire codebase works. Rewriting your code in Python 3 can help realize the power and ease of use of Python 3, making your code shorter and more efficient. Additionally, if you use other methods to migrate your code base, there may be issues implementing Python 3.x features until the entire code base is migrated. Rewriting the codebase solved this problem and also gave us the opportunity to upgrade any code blocks we'd wanted to do for a long time.
However, this method only works if the code base has a small scalable size.
On the other hand, we can use the Python porting process officially described in the documentation. At a high level, this porting is a three-step process -
Automatic conversion
Manual changes
Runtime Verification and Repair
However, the prerequisite for all this is to first install Python 3 and its related packages and libraries. Let's look at the Windows process.
Download and install -
https://www.python.org/ftp/python/3.7.4/python-3.7.4.exeThis will install the Python software. After that, you can start the porting process using official Python 2 to Python 3 porting modules or software (such as 2to3, etc.). This will port the code to Python 3, but you must be aware of the following issues -
The classifiers in the installation files must be updated to include programming language ::Python::3. This will only allow Python 3 or some version of it to be present in the coding environment (version-specific classifiers are also available), preventing unnecessary backtracking into Python 2 code. This will greatly help maintain code integrity and allow the entire codebase to exist only in Python 3.
Since Python 3 is not backwards compatible, all scripts in the code base must be upgraded to the Python 3 standard. Here we can use a script like Modernize or Futurize at the beginning of each module that needs to be upgraded. Not all Python features will be used in modules, but some basic features must be modernized to ensure the smooth operation of any module. Therefore, to be on the safe side, the official Python documentation recommends adding the following code -
from __future__ import absolute_import from __future__ import division from __future__ import print_function
This ensures that our current code doesn't degrade and stop working under Python 3 due to some basic dependencies. However, a better approach is to use the Pylink project, where the --py3k flag helps indicate when our code deviates from Python 3 compatibility. This prevents Modernize or Futurize scripts from being run individually at the beginning of each block, resulting in shorter code and fewer errors, although it's important to note that Pylint only supports Python 3.4 or higher.
In some cases, the Python 2 code base may contain modules that cannot run in Python 3. By using feature detection, we can find out whether previous projects support Python 3 versions. Using feature detection instead of version detection to check the correct version we need to use is a safer approach and will prevent more problems in the future.
try: from importlib import abc except ImportError: from importlib2 import abc
In Python 3, text and binary data types cannot be blatantly mixed as this will cause errors. But this check cannot be performed automatically using any other Python library, so it is better to run a custom code block to compare string and binary based data, the reason is that Python 3 bytes behaves differently like in older versions of Python The same old str.
Having good test coverage is important to prevent bugs and reduce the time needed to upgrade your code by changing only what is needed. Tools like Coverage.py can be of great help in this situation, finding the exact location of the error by finding the difference between what was executed and the error.
Here we looked at some ways to migrate a large software codebase from Python 2 to Python 3, as well as some limitations we should be aware of and some useful methods we can use. However, the process may vary to some extent depending on the code base considered and the libraries and modules used in the project. These general steps can really convert most code bases to Python 3 and modernize Python code in an overall good way.
The above is the detailed content of How to update a large Python 2 codebase to Python 3?. For more information, please follow other related articles on the PHP Chinese website!