If there is truly a 'best' way, what is the best way to ship a python app and ensure people can't (easily) reverse engineer your algorithms/security/work in general?
If there isn't a 'best' way, what are the different options available?
Background:
I love coding in Python and would love to release more apps with it.  One thing that I wonder about is the possibility of people circumventing any licensing code I put in, or being able to just rip off my entire source base.  I've heard of Py2Exe and similar applications, but I'm curious if there are 'preferred' ways of doing it, or if this problem is just a fact of life.
Even if you use a compiled language like C# or Java, people can perform reverse engineering if they are motivated and technically competent.  Obfuscation is not a reliable protection against this.
You can add prohibition against reverse-engineering to your end-user license agreement for your software.  Most proprietary companies do this.  But that doesn't prevent violation, it only gives you legal recourse.
The best solution is to offer products and services in which the user's access to read your code does not harm your ability to sell your product or service.  Base your business on service provided, or subscription to periodic updates to data, rather than the code itself.
Example:  Slashdot actually makes their code for their website available.  Does this harm their ability to run their website?  No.
Another remedy is to set your price point such that the effort to pirate your code is more costly than simply buying legitimate licenses to use your product.  Joel Spolsky has made a recommendation to this effects in his articles and podcasts.
Python Applications: Can You Secure Your Code Somehow?