Execute an installed Python package as a script?
Question: Is there a way to enable a package to be executed as a script? For example:

    
    
    [~]# easy_install /path/to/foo.egg
    ...
    [~]# python -m foo --name World
    Hello World
    

I've tried creating a `__main__.py` file inside my package but it's not being
executed (I'm using Python 2.6). The following error is raised:

    
    
    foo is a package and cannot be directly executed
    

The structure of my package is as follows:

    
    
    foo/
      setup.py
      foo/
        __init__.py
        __main__.py
    

Running `python -m foo.__main__ --name World` works as expected, but I would
prefer the former way of execution. Is this possible?


Answer: This is a regression in Python 2.6. See
[issue2571](http://bugs.python.org/issue2751):

> The ability to execute packages was never intended, since doing so breaks
> imports in a variety of subtle ways. It was actually a bug in 2.5 that it
> was permitted at all, so 2.6 not only disabled it again, but also added a
> test to make sure it stays disabled (2.4 correctly rejected it with an
> ImportError, just as 2.6 does).

You have a few options, you can either always run it specifying main:

    
    
    $ python -m module.__main__
    

Or you can write a shell script wrapper that detects the python version and
then executes it in the different style.

Or you can execute code on the command line that will import and then run the
module, and then perhaps place that in a shell script:

    
    
    $ python -c "import module; module.main()"
    

In my own command-line projects I have both the shell script that catches
errors (python not being installed, etc.) but the shell script will also
execute the import code and detect if the necessary modules have been
installed and prompt an error (with a helpful link or install text).

