cx_Freeze and PySide on Mac

I’d had success using py2app for building Mac binaries for distribution but wanted to give cx_Freeze a go since it’s cross platform - allowing builds for Windows, Linux, and more. Unfortunately, attempting to build using cx_Freeze was resulting in errors:

libpyside-python2.7.1.1.dylib: No such file or directory

If found a tip suggesting you can do a touch libpyside-python2.7.1.1.dylib in you’re applications folder to get rid of this error by creating a dummy file. But then you just end up with this instead:

copying Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/               PyQt4/ -> build/exe.macosx-10.6-intel-2.7/
copying /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyQt4/ -> build/exe.macosx-10.6-intel-2.7/
copying QtCore.framework/Versions/4/QtCore -> build/exe.macosx-10.6-intel-2.7/QtCore error: QtCore.framework/Versions/4/QtCore: No such file or directory

It’s looking for the file in the wrong place: QtCore should be prefixed with the same path as PyQt4 before it. There are various version of PySide available - but whether you try to pip install or git clone and then python install you’ll find that you end up in much the same place. In most cases however the installation simply fails.


So try a different tack: Homebrew. Homebrew is a package manager for Mac, that has a large number of successfully buildable software packaged specifically for the Mac. I’ve successfully used it to install a number of things, but steered clear of it for Python things that could be pip installed. However, there seemed to be little alternative - and actually I think brewed Python has it’s advantages (being more up to date being one, being guaranteed to work with other brewed packages the other).

At this point my default Python install was the Mac default (Darwin, llvm-compat) version, installed under /Library/Python/2.7/ so first that needed to change.


brew install python

The above will take quite a long time (particularly the Python bit) but you should now have a successfully brewed Python on which to base your apps. If you’ve had a different Python (e.g. system python) installed you may need to update your paths to ensure that the brewed one is being used - Homebrew actually gives you the instructions to correctly do this: but just add /usr/local/lib/python2.7/site-packages:/usr/local/share/python to your PATH variable in .bash_profile e.g.

export PATH=/usr/local/lib/python2.7/site-packages:/usr/local/share/python:$PATH

Ready to build your own apps?

Create Simple GUI Applications with Python and Qt

The complete beginners guide to building cross-platform GUI applications with Python. Step by step from displaying your first window, to fully functional and useable software.

Join 300+ readers already using this book to build awesome things.

77 page ebook, 2.5 hours of video tutorials


An important fact about brewed Python is that it will continue to look in your system site-packages folder, and do so in preference to your brewed site-packages. If you have attempted to install Pyside (or anything else) before you may wish to remove them to stop conflicts.

Next install PySide via brew (the pip install does not work).

brew install pyside

The install cx_Freeze via pip (it’s not in brew, and the pip works fine).

pip install cx_Freeze

Finally, check PySide are cx_Freeze are set up correctly by starting a Python interactive shell and entering the following (you should get the same output):

>>> import PySide
>>> import cx_Freeze
>>> PySide.__version__
>>> cx_Freeze.version

You’re now free to build your apps.

Update 12.01.2014

There are some more things that now no longer work (as the app I’m building has got more and more complicated). However, there are solutions to both.

First of all is using PyQt5 with cx_Freeze raises an issue with finding the qt-menu-nib file that cx_Freeze uses to determine if it is packaging Qt - this folder no longer exists on Qt5. However, you can pass any old folder to cx_Freeze on the command line and it won’t matter e.g.

python bdist_mac --qt-menu-nib=/usr/local/Cellar/qt5/5.2.0-beta1/plugins/platforms/

Another issue, documented here occurs when importing SciPy optimize based modules. That link contains a bit of hack code to fix it.

Get regular GUI tips & tutorials direct to your Inbox.


Related posts