Re: NVDA 2018.3: wxPython 4 is not the same thing as Python 3

Brian's Mail list account <bglists@...>

That is good to know. However a lot of this has not been explained well to users until you wrote these messages. A lot of the debates about have been at a very technical level and probably above the pay grade of most users... grin, and in various tickets and issues on gather which makes it unlikely many here will have ever looked at them in any case.
Sent via blueyonder.
Please address personal E-mail to:-, putting 'Brian Gaff'
in the display name field.

----- Original Message -----
From: "Joseph Lee" <>
To: <>
Sent: Sunday, August 26, 2018 8:11 PM
Subject: Re: [nvda] NVDA 2018.3: wxPython 4 is not the same thing as Python 3


In the past, when Python 3 wasn’t under active development or deployed widely, NVDA source code was modified periodically to add features from various Python 2.x releases.

As for emulation: we’re talking about two completely different aspects of computing here: Python is a programming language, not an operating system. Emulation makes sense if Python was an operating system and had necessary infrastructure to run legacy code. However, being a programming language, it may not allow old assumptions to hold true in some cases (Unicode, for example). At least Python 3 interpreter will warn you if you’ve got code that depends on old assumptions, but it won’t correct it for you; in a way, you can get around it by using a compatibility layer (called “shim”), and one such compatibility layer will be included in NVDA 2018.3: the “six” module, and we got this for free as part of moving to wxPython 4.0.3.



From: <> On Behalf Of Gene
Sent: Sunday, August 26, 2018 12:03 PM
Subject: Re: [nvda] NVDA 2018.3: wxPython 4 is not the same thing as Python 3

Does that mean anything for the future? How often is support stopped for old versions. If this occurs once every roughly ten years, this could be a serious ongoing problem. .

Should the new Pytho have some sort of emulator to allow older code to run?


----- Original Message -----

From: Joseph Lee <>

Sent: Sunday, August 26, 2018 1:51 PM

To: <>

Subject: Re: [nvda] NVDA 2018.3: wxPython 4 is not the same thing as Python 3

Several important reasons come to my mind:
* Python 2 sunset date is approaching: On January 1, 2020, support for Python 2 will be terminated by Python Software Foundation (PSF), the main entity that defines and coordinates development of Python programming language. Although there might be "night lighting" efforts - longer support by third parties, but for all intents and purposes, as far as CPython is concerned, that is the sunset date.
* Unicode: Python 2 had ability to deal with Unicode and older text encoding mechanisms. Python 3 standardizes this around Unicode. With more characters being added to Unicode standard (the latest edition, version 11.0, adds emoji and characters from additional scripts around the world), coupled with globalization and internationalization of software projects, it became important to standardize around this.
* New possibilities: Python 3 introduces features that could be used by NVDA and its add-ons, including asynchronous I/O, more predictable thread switching mechanism, virtual Python environments (for isolating code from the outside world for testing and other scenarios) and many others.
* Easier source code level debugging: if you run NVDA from source code, you'll find you're using Windows 8 when in fact you might be running 8.1 or 10. Python 3 adds native support for Windows 10, which makes it easier for developers to add new features or test bug fixes for Windows 8.1 and 10 as well as on older Windows versions.

Of course, with change comes responsibilities to make sure old code works as intended (as much as possible), and every change has its upsides and downsides. At the moment some NVDA developers (including I) are researching possible issues people will encounter when we do move to Python 3.

-----Original Message-----
From: <> < <> > On Behalf Of Don H
Sent: Sunday, August 26, 2018 11:39 AM
To: <>
Subject: Re: [nvda] NVDA 2018.3: wxPython 4 is not the same thing as Python 3

So I have to ask the question why change to the new python if it has the potential of messing things up?

On 8/26/2018 1:14 PM, Joseph Lee wrote:

When I call espeak_Initialize when initializing Espeak from NVDA, I
get an exception and Espeak can’t find phonetics table from a specific
location. I will need to investigate this further, as being able to
get at least one synthesizer running in Python 3 mode is a crucial
milestone I hope to achieve soon.



*From:* <> < <> > *On Behalf Of *Reece
H. Dunn
*Sent:* Sunday, August 26, 2018 10:26 AM
*To:* <>
*Subject:* Re: [nvda] NVDA 2018.3: wxPython 4 is not the same thing as
Python 3

On Sun, Aug 26, 2018 at 05:06 PM, Joseph Lee wrote:

Hi all,

For the last few hours, there has been a thread regarding
incompatibility of some add-ons and NVDA 2018.3, with some folks
claiming that speech synthesizers are not compatible. This
information is mostly false, and this may have been driven by
confusion regarding wxPython 4 versus Python 3.

wxPython: NVDA 2018.3 will upgrade wxPython GUI toolkit to version
4.0.3, a necessary milestone for the eventual migration to Python 3.
If an add-on uses attributes that are not found in newer wxPython
releases, they won’t load. Likewise, an add-on that exclusively uses
wxPython 4 material won’t work in older NVDA releases. At least some
GUI elements of speech synthesizer drivers are affected, and that’s
the reason why there has been an uproar regarding an important
add-on. Regarding speech synthesizer drivers and GUI issues, they
produce minor warnings, but apart from that, they are usable (but
not forever).

Python 3: Python is a programming language. Therefore, moving from
one version of a programming language to the next can be
challenging, especially if it introduces incompatible syntax and
throws away old internal assumptions. Python 2 to 3 migration will
go through both issues and much more, and research suggests that
many NVDA features and add-ons will be affected, including some
synthesizers the community uses (sorry, Espeak, you’re included in
this mix). Specifically, due to prevalence of Unicode, it’ll take
some time to come up with routines that will work with text
formatted as Unicode and other encodings, and unfortunately, some
speech synthesizers will insist on using ANSI format strings when in
fact Python 3 wants to read and write Unicode (Espeak is a notable

What is the issue/are the issues regarding espeak (I have experience
converting Python 2 to 3 code)?

Are you referring to espeak wanting UTF-8 (which is like/compatible
with ANSI/ASCII strings), or issues with the way the NVDA espeak
binding is written?

NOTE: UTF-8, UTF-16, and UTF-32 are all different Unicode encodings.
Espeak supports UTF-8 and UTF-16, but not UTF-32.

Kind regards,

In regards to add-ons, any add-on that deals with text processing
are affected (speech synthesizers, for example). Also, if they use
Python standard library (various Python modules), they need to take
note of differences between Python 2 and 3, especially in regards to
module and function renames (_winreg versus winreg, the former with
an underscore and the latter without).

A more general overview of what will it take to move NVDA to Python
3 can be found at:



Join to automatically receive all group messages.