Python _ _ _ __ ___ __| |___ _ _ _ _ (_)______ | ' \/ _ \/ _` / -_) '_| ' \| |_ / -_) |_|_|_\___/\__,_\___|_| |_||_|_/__\___|
Modernize is a Python program that reads Python 2 source code and applies a series of fixers to transform it into source code that is valid on both Python 3 and Python 2.7.
This allows you to run your test suite on Python 2.7 and Python 3 so you can gradually port your code to being fully Python 3 compatible without slowing down development of your Python 2 project.
The python -m modernize command works like
python -m fissix, see fissix.
Here's how you'd rewrite a
single file:
python -m modernize -w example.py
It does not guarantee, but it attempts to spit out a codebase compatible
with Python 2.6+ or Python 3. The code that it generates has a runtime
dependency on six, unless the
--no-six option is used. Version 1.9.0 or later of six is
recommended. Some of the fixers output code that is not compatible with
Python 2.5 or lower.
Once your project is ready to run in production on Python 3 it's recommended to drop Python 2.7 support using pyupgrade
Documentation: modernize.readthedocs.io.
See the LICENSE file for the license of modernize.
Using this tool does not affect licensing of the modernized code.
This library is a very thin wrapper around fissix, a fork of lib2to3.
Same old library with the added fixers:
classic_division_warningswhich ensures classic division warnings are issued non-native types (ie. numpy types). This is unlike the behavior of the interpreter option-Qwarnalldocs.import_division_futurewhich will addfrom __future__ import divisionto any files using division
The warnings from classic_division_warnings are intended as an aid to determining which usages of division (/, /=) should be changed to floor division (//, //=) before running the fixer import_division_future.
For example if one sees:
- only
classic int divisionwarnings for an instance of division then it should be changed from/to// - both
classic int divisionandclassic float divisionwarnings for an instance of division then one must carefully consider the changes to the behavior of division onceimport_division_futureis used
Disclaimer: the warnings are useful only if you have good test coverage. If you have poor test coverage you may not find that an instance of division is actually used with both float and int types and thus should not be changed from / to //.
Tips: