I've added a hook for pyzmq, to the best of my ability. AFAICT it works, but I've only tested on Windows (Python 3.4). Since I wasn't sure if zmq links to libzmq(.pyd) in the same way on other platforms, I only copy that file on Windows.
Though, does the API allow for simply renaming libzmq.pyd? The problem is really that cx_Freeze creates the file zmq.libzmq.pyd, while it should be called just libzmq.pyd.
Hmm, I think the naming thing is a bug that we've also encountered with Scipy. cx_Freeze is finding what look like Python extension modules, but then they're being loaded from other compiled libraries (e.g. Cython compiled code). But cx_Freeze creates wrapper modules that attempt to load these from pkg.subpkg.mod.pyd, whereas the compiled code is expecting them to be on the library search path and just called mod.pyd.
@Anthony Tuininga This is another argument in favour of not putting packages into zip files by default
I think it's OK, though we're working on an overhaul of cx_Freeze code, and I hope to make the default be to include packages as whole folders rather than putting them into a zipfile, which would remove the need for copying libzmq.
Yes, that's a bit complicated - pyzmq uses an external libzmq if it finds one at build time, and builds that internal copy otherwise. It's more likely to be unnecessary on non-Windows platforms, but not guaranteed. However, I think we should leave this as is at present, and aim to get packages like zmq copied correctly.