Mac OS X Universal/Arm/Intel

I’m starting an update of an old wxPython Mac app. I want to be ready to use the wxPy 4.1.2 release, so am happy to work with snapshots in the mean time. But which snapshot to use?

Python.org has a 3.10 series release (3.10.1) for Universal2 only.
The more mature 3.9 series has releases for Intel only and Universal1.
I assume Universal2 is the future and what I should go with.

However the wxpy snapshot directory only has one Universal2 release.

  • wxPython-4.1.2a1.dev5259+d3bdb143-cp38-cp38-macosx_11_0_universal2.whl

This is for Python3.8, and the python.org only has builds for 3.8.10 (2 releases behind the latest 3.8.12 as it is now only in security release in source code only - no official builds).

There are snapshots for Python 3.9/3.10 but they seem to be for ARM only.

  • wxPython-4.1.2a1.dev5259+d3bdb143-cp39-cp39-macosx_12_0_arm64.whl
  • wxPython-4.1.2a1.dev5259+d3bdb143-cp310-cp310-macosx_12_0_arm64.whl

My preference is to go with 3.9 or 3.10 Universal.
Where are the wxPy snapshots for 3.9/3.10 universal?

What is the situation for macosx releases - present and future?

What should I be developing with and targeting to support relatively recent Intel and M1 systems?

Thanks, Brendan.

1 Like

Today I decided ot download the “arm” wheels and unzip them to see what was inside.

unzip wxPython-4.1.2a1.dev5261+04c2cc39-cp310-cp310-macosx_12_0_arm64.whl

Looks like these might be “universal” wheels after all, as there seems to be arm64 and x86_64 dynamic libraries.

file *.dylib | grep x86_64 | wc -l
90

file *.dylib | grep arm64 | wc -l
90

Is this correct? Are these wheels really universal wheels?

If so, shouldn’t they be named “universal” instead of “arm” (for clarity) ?

Thanks, Brendan.

Yes they are universal binaries. The parts of the file names after the version number are generated by Python and/or setuptools, and I haven’t yet looked into why it’s acting like a single architecture build. I do replace most of the build part of the process, and there is a small hack in place to let the wheel phase know that the build phase was already done. So it may just need another tweak in there.

1 Like

Thanks for the clarification Robin.

I see the 2021-12-29 build now has the “universal2” extension for the macosx cp310 build :slight_smile:

The cp38 and cp39 builds have the “x86_64” extension, and there is no builds with “arm64” extension.

However, they are all approximately the same size (47MB) so I assume they are all “universal2” builds.

The 2021-12-31 build now has “universal2” for cp39 :slight_smile:

wxPython-4.1.2a1.dev5268+fcf49322-cp39-cp39-macosx_10_10_universal2.whl

Now only cp38 has the “x86_64” extension instead of “universal2”.

Looks like this is progressively getting better :slight_smile:

Where did you find arm wxPython wheels? There is no mention of arm at

I’m trying to install wxPython in Ubuntu 22.04 ARM (which happens to be running inside a VM running on an M1 Mac).

Turns out that if you simply pip install wxpython on an Ubuntu system and if it happens to be arm instead of x86 wxPython will be built on the spot for you - no complex build toolchain required - just make sure you install some essential linux packages first (see below). See my answer Pip cannot install wxPython for Python 3.10 (32-bit) - Stack Overflow

$ sudo apt-get install dpkg-dev build-essential python3-dev freeglut3-dev libgl1-mesa-dev libglu1-mesa-dev libgstreamer-plugins-base1.0-dev libgtk-3-dev libjpeg-dev libnotify-dev libpng-dev libsdl2-dev libsm-dev libtiff-dev libwebkit2gtk-4.0-dev libxtst-dev
$ pip install attrdict3
$ pip install wxpython

I am now happily running wxPython in a Ubuntu 22.04 (arm) virtual machine on my Apple MacMini M1 (arm) machine.

P.S. I happen to use the free UTM Virtual Machine app for Mac to run Ubuntu, which employs Apple’s Hypervisor virtualization framework to run ARM64 operating systems on Apple Silicon at near native speeds.