Ah Python, how I love to hate you.
The Python language was originally developed to simplify programing, and to that end, it has succeeded.
The problem? It's completely useless for real world development.
True you can write good programs to do all the common tasks, however when one wants real functionality with Python, they are in for a world of frustration.
The core of most of the problems, is Python is not portable (explained later) and that most of the Python development community became inactive in the early 2000's, as Java and other languages came into their own.
Python has many different versions, with enough differences between them, that programs written in one version, will not work in another version. In simple terms, Python is NOT backwards compatible, unlike a lot of other languages.
A program written in 2.6, most likely will not run in 2.4. A program written in 3.x will not work with any of the 2.x versions, and 2.x will not work in 3.x .
The 2to3 adapter is a joke to get to work correctly, and full of bugs.
When I mentioned portability earlier, I am talking about adaptability and the ability to distribute your programs.
Most other languages have built in compilers, that spit out executable files automatically . 2 other languages I use, Java and C++ can easy spit out executable that are platform independent. Python? Nope. One has to search around for a third party compiler.
There are only 2 major ones known, both with their own problems, cx_freeze, and Py2exe.
Cx_freeze will not compile files correctly for Windows 7 ( I tried for 3 hours ), and Py2exe is a steaming pile of crap!
Everyone recommends Py2exe, but apparently no one actually tried to use it. The executable that are crapped out by this, are platform, and version specific.
Let me backup a little bit, and explain how this headache works.
Once you complete a program you wish distribute, you have to take careful note of which version of Python you used.
From there you much figure out which Visual C Runtime library you need to include with the program - Python for Windows was compiled in Visual C.
Once that is accomplished, you need to create a setup.py file for your program. Than run some commands from DOS. I made my life a lot easier, by creating a .bat that automatically did this step for me.
After this, it spits out an executable, that will run on your computer. Repeat - It - will - run - on - YOUR - computer. Now with the files in hand, you need to find a packaging tool. I use "Install Creator " since it's easy to use, and free. http://download.cnet.com/Install-Creator/3000-2383_4-10218346.html.
Package your files, executable and the runtime libraries, and your done - sort of.
There are many dependency files that Py2exe will not include in the executable, and are illegal to distribute ( Remember Python for Windows, was compiled in Visual C ).
The major dependency files are standard windows files, however there is one that is Windows version specific. If your using Windows 7, folks on any other version of windows ( XP, Vista, ... ) will not be able to use your program ( same is true for programs compiled in other windows versions ) .
Why not just have them download the same version of Python, you may ask?
To a casual computer user, getting a .py file to work would be a nightmare. By default .py is NOT ASSOCIATED with Python.exe( and has been that way since Windows 2000 ) . Attempting to manually associate .py will not work. Easiest solution is creating a .bat file to open the .py as such ...
Why on the gods green earth, do I have to do this?
Now we move on to Python, and the WEB. Python has many built in features to deal with networking and various tasks related to the internet, however you will find even in the latest version ( 3.2 ) many of them are STILL buggy and preform erratically. ( do a search on the topic ).
What about web hosting and and server functions ?
Python will not run naturally on any modern web server. To do that, one needs to find third party extensions for the server. I have only found 2 - both of them require a very outdated version of Python, and nether one is compatible newer server software ( I tried for over 3 months with MANY different servers ).
The companies that actually run Python on their servers, use custom made programs written in other languages , such as C and Java. In simple terms, you have to write your own parser in another language http://en.wikipedia.org/wiki/Parsing to get Python to function on your server.
What about a server written in all Python you may ask. It's possible to write one in under 4 hours, however networks do not like Python for some reason. With out touching anything, I can get my custom written Java and C++ servers up and running with no issues. Python, however, gets rejected by my network. From what I have read, I need to download some adapters to get it to work, but I am not going to risk screwing up my network.
What about games?
If your writing a text based game, Python is great for that, however it naturally does not support anything graphical. Well Python does have Turtle and TK, but they are useless in game creation.
For simple 2D games ( think Sega Genesis or Super Nintendo ) , the addon called Pygame works great. I seriously have no complaints about it, and recommend it to any one who wants to learn about game development.
For 3D games, one has to rely on prebuilt game engines. There are 3D addons for python it's self, but they are VERY slow and useless for games.
The 2 major ones would be Ogre and Panda 3D. Both of them use Python for game logic, while doing the 3D rendering and other functions in C. They both have their headaches, so do your research on them.
Lastly we move on to functionality / fundamentals. I should have included this section first, but I had to vent my frustrations about other things.
I mentioned earlier that the development community had mostly became inactive in the early 2000's, and it shows. Many addons require a specific version of Python to work. Many of them are seriously outdated, and "abandon" by their development teams.
The problem is you need third party addons to make Python useable, and end up with several versions of Python on your computer.
I recently did a purge of my system of most of the Python - junk - I had building up. I removed 5 different standard versions of Python, and 2 "specialty" versions.
I am currently running 2.7, mostly due to the fact 3.x is incompatible with 95% of the addons out there. I also find it funny the core Python developers are updating both 2.x and 3.x at the same time, realizing that almost no one makes addons for Python anymore.
It's mind numbly frustrating to be exposed to other, more "useful" languages, and coming back to Python to find what you can easy do in the other languages, can not be dome without third party addons. So you download addon after addon, trying to find one that actually still works, installing many different versions of Python because each addon requires a specific version, and generally making one big mess of your hard drive. At the end of the day, you just end up going back to the other languages, due to the pounding migraine headache Python causes.
Here we are at fundamentals. Python was supposedly based on the principals of "Zen Of Python" http://www.python.org/dev/peps/pep-0020 , however the language it's self violates these "rules" quite a bit. I will not go into great details, but if you do some research on how Python handles classes, you'll see some of what I am talking about .... C++ + stupidity = Python Classes.
I think I have ranted enough about Python today. It may be a great tool for those that are new to programming, but is completely worthless inn practical application.