It says on http://www.python.org/dev/peps/pep-0008/
Package and Module Names Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged. But StringIO does not following this convention. Although on the same page, it also mentions the following. However, since StringIO is in the library, shall its name be rectified? The naming conventions of Python's library are a bit of a mess, so we'll never get this completely consistent -- nevertheless, here are the currently recommended naming standards. New modules and packages (including third party frameworks) should be written to these standards, but where an existing library has a different style, internal consistency is preferred. -- http://mail.python.org/mailman/listinfo/python-list