I would prefer to port to both GTK 3 and Python 3 in one go (2) after
a thorough preparatory phase (1). Here are my thoughts:
(1) The first phase - Forward-compatible Python 2.7
To make the Python 2 codebase as much forward compatible with Python 3
as possible, identify tricky code and (for me) to get familiar with
# Key requirements:
- Zim is stable and fully functional.
- It is still possible to add new features, fix bugs and make releases.
- A working branch (py27?) can be regularly merged to the trunk after
a code review.
a) We should study the incompatibilities between Python 2 and 3 (e.g.
) and review the whole Zim codebase file by file. If the
incompatibility can be solved with a forward-compatible Python 2.7
code (e.g. `except KeyError as e:` istead of `except KeyError, e:`),
port it immediately. Otherwise mark it with `# py2!` (optionally with
b) We should use `from __future__ import ...` features such as
print_function, unicode_literals, division and absolute_import.
c) We may run Zim with `python -3` option to enable extra warnings.
d) We should port Zim to the new PyGTK 2.24 APIs (e.g. widget.window →
widget.get_window(), container.child → container.get_child(), etc.) to
make it compatible with PyGTKCompat .
e) I propose using a Python-2 compatible variant of type hints .
I use them a lot in my Python 3 + GTK+ 3 project at work and they have
proved to be really useful as the PyCharm IDE supports them quite well
(including the free Community Edition). It can even generate
type-checking stubs for GTK+. I don't know what is your tooling but
the mypy type checker can be used independently. There is no extra
run-time dependency as the typing module is necessary only during the
static type analysis.
If you are not fond of the type annotations, we may strip them off
easily after porting (regex "#\s*type:\s+.*$"). However, I believe the
annotations will help me to get familiar with the code and should spot
some (but not all) errors without the need to run Zim again and again.
After this first phase, we will have a fully functional Python 2.7
version of Zim. We may even keep it around as a LTS release for users
who cannot switch to Python 3.
(2) The second phase - Python 3 and GTK 3 port
To port Zim to Python 3 and Gtk3 in one go
- Decide on a minimal Python 3 and GTK+ 3 version. Python 3.4 is
available in Debian Jessie and Ubuntu 14.04 LTS, Python 3.5 in Debian
Stretch and Ubuntu 16.04 LTS.
- A new branch is created.
- All plugins and non-essential modules are disabled.
- We may try to run Python's 2to3 script. I don't know how useful it
- All code marked with # py2! is ported manually.
- PyGTKCompat  module is used to get the app running fast and then
GUI is ported flle-by-file to PyGObject GTK+ 3.
On Tue, Mar 14, 2017 at 12:22 PM, Jaap Karssenberg
> Hi Jiri,
> Would like to take you on on that offer. I will set up a branch to be used
> for porting (I have a preferred starting point, not current trunk).
> Strategy wise I believe we need to go to Gtk3 before we can go to Python3,
> so that will be 2 phases.
> For the first step going to Gtk3 I would like to split up the application in
> modules. Trying to get the basic application running first, than port
> additional modules and plugins one-by-one.
> Let's simply use a wiki page to track progress and who-does-what. I prefer
> (private) email for quick questions / discussions.
> Is this what you had in mind?
> On Sat, Mar 11, 2017 at 7:39 PM Jiří Janoušek <janousek.j...@gmail.com>
>> > Yes, I have plans to port zim to python 3, but can't commit to a
>> > concrete
>> > timeline on this moment.
>> I might help with the porting to Python 3 & GTK+ 3. What is the best
>> place to discuss the strategy? Mailing list, bug tracker or Launchpad
>> blueprints? I prefer the bug tracker.
>> Best regards,
>> Jiri Janousek
>> Mailing list: https://launchpad.net/~zim-wiki
>> Post to : email@example.com
>> Unsubscribe : https://launchpad.net/~zim-wiki
>> More help : https://help.launchpad.net/ListHelp
Mailing list: https://launchpad.net/~zim-wiki
Post to : firstname.lastname@example.org
Unsubscribe : https://launchpad.net/~zim-wiki
More help : https://help.launchpad.net/ListHelp