Deploy PyQt Applications on Mac OS X with PyInstaller!

The interweb seem to incline on py2app when it come to deploying applications on mac. I’ve tried to make a single deployable .app file for my application for a long time trying to follow these instructions from ars technica. I’m not a hacker and just want to produce a deployable usable application for others to use. And it seems py2app from MacPorts wasn’t able to surmount the Snow Leopard’s 64-bit compatibility issue.

And then, I was slacking off while studying for my final and out of nowhere I found PyInstaller‘s explicit support for PyQt and its recent support for the mac. And after trying, almost everything works out without much of a kink. Credit goes to ChrisWayg who produced an amazingly complete and up-to-date set of instructions to follow. I’m merely telling how my application did using his instructions (April 2010) and hopefully doing my part to draw more attention to the excellent PyInstaller. Read More…

Python’s Function Static Variable

So you want a variable that stays between different calls of a function. Not the sexiest thing ever but always handy in small programs.

There’s tons of ways of doing this. You can embark on a quest to find the meaning of Pythonic or take this method that’s relatively simple:

def a():
    if not hasattr(a, "b"): a.b = 0
    a.b += 1
    print a.b

Calling a(), you’ll get 1, 2, 3, …

Note attribute ‘b’ of ‘a’ does not exist until you declare it for a first time. My main preference here is that ‘static’ variables used this way does not spill onto the rest of your code. Also, it’s clean, no classes, no data structures.

Suppress Scapy IPv6 Warning

When you run Scapy without a default IPv6 routing gateway, Scapy will display this annoying warning:

WARNING: No route found for IPv6 destination :: (no default route?)

You definitely don’t want to see it every time you run the script you built with Scapy. To get rid of it, simply add

import logging

before importing Scapy to suppress all messages below error messages

Python Log Stdout to File

Python has the ability to alter its sys.stdout as to redirect its print commands to pretty much anything.

If, for instance, you want to print to both standard output and to a log file, you can create a class to handle the stdout like such:

class MyOutput():
    def __init__(self, logfile):
        self.stdout = sys.stdout
        self.log = open(logfile, 'w')
    def write(self, text):
    def close(self):
sys.stdout = MyOutput("log.txt")
print "blah blah blah"

Read More…

PyQt and Snow Leopard

There are some 64-bit related issues when using PyQt and Snow Leopard. There’s the way to resolve it by reverting to 32-bits:

  1. Get the latest versions of PyQt and SIP. You need Qt installed of course.
  2. Configure SIP using
  3. python --arch i386
  4. Configure PyQt using
  5. python --use-arch=i386
  6. Finally, make sure your python is running in 32-bit mode because current Qt doesn’t support 64-bit mode. Add

    to your .bash_profile in your home directory

  7. If your Python still refuses to run in 32 bit mode, try
    arch -i386 python

Qt with C++ or Python Tutorial

Qt Creator

Qt Creator

This is a collection of tutorials I found useful to get into the Qt framework. Being more used to the Microsoft standard, I have always wanted to branch into more cross-platform stuff so that I can at least write tools and programs for my Mac. I never really liked the idea of “reinventing the wheels” feel of C++ unless it was on an embedded system so Python looked like a solid contender to the rather messy Perl. Read More…

1 2 Scroll to top