views:

5528

answers:

4

I have started on a personal python application that runs on the desktop. I am using wxPython as a GUI toolkit. Should there be a demand for this type of application, I would possibly like to commercialize it.

I have no knowledge of deploying "real-life" Python applications, though I have used py2exe in the past with varied success. How would I obfuscate the code? Can I somehow deploy only the bytecode?

An ideal solution would not jeopardize my intellectual property (source code), would not require a direct installation of Python (though I'm sure it will need to have some embedded interpreter), and would be cross-platform (Windows, Mac, and Linux). Does anyone know of any tools or resources in this area?

Thanks.

+2  A: 

Wow, there are a lot of questions in there:

  • It is possible to run the bytecode (.pyc) file directly from the Python interpreter, but I haven't seen any bytecode obfuscation tools available.

  • I'm not aware of any "all in one" deployment solution, but:

    • For Windows you could use NSIS(http://nsis.sourceforge.net/Main_Page). The problem here is that while OSX/*nix comes with python, Windows doesn't. If you're not willing to build a binary with py2exe, I'm not sure what the licensing issues would be surrounding distribution of the Python runtime environment (not to mention the technical ones).

    • You could package up the OS X distribution using the "bundle" format, and *NIX has it's own conventions for installing software-- typically a "make install" script.

Hope that was helpful.

pjbeardsley
Python's bytecode is very high level and trivially decompileable; distributing .pyc files is really not any form of protection you want to rely on.
Thomas Wouters
+1 for NSIS, I've been using it for one of my own projects.
Torsten Marek
+4  A: 

You can distribute the compiled Python bytecode (.pyc files) instead of the source. You can't prevent decompilation in Python (or any other language, really). You could use an obfuscator like pyobfuscate to make it more annoying for competitors to decipher your decompiled source.

As Alex Martelli says in this thread, if you want to keep your code a secret, you shouldn't run it on other people's machines.

IIRC, the last time I used cx_Freeze it created a DLL for Windows that removed the necessity for a native Python installation. This is at least worth checking out.

cdleary
+1  A: 

Maybe IronPython can provide something for you? I bet those .exe/.dll-files can be pretty locked down. Not sure how such features work on mono, thus no idea how this works on Linux/OS X...

dsvensson
A: 

I have been using py2exe with good success on Windows. The code needs to be modified a bit so that the code analysis picks up all modules needed, but apart from that, it works.

As for Linux, there are several important distribution formats:

  • DEB (Debian, Ubuntu and other derivatives)
  • RPM (RedHat, Fedora, openSuSE)

DEBs aren't particularly difficult to make, especially when you're already using distutils/setuptools. Some hints are given in the policy document, examples for packaging Python applications can be found in the repository.

I don't have any experience with RPM, but I'm sure there are enough examples to be found.

Torsten Marek