Issue 17473: -m is not universally applicable (original) (raw)

Many executables in python are meant to be run on python scripts, but can't run python scripts that are part of a package. For example, one can do python -m pdb foo.py, but not python -m pdb package.foo. This makes it more difficult to interact with executable scripts within a package. In particular, the following will NOT work in general: python -m pdb package/foo.py

It would be easier if these modules gained their own -m argument to specify import paths instead of files. For example, the third party coverage module does this, and can be run using the command python -m coverage run -m package.foo.

What follows is a small list of scripts present as modules in the Python stdlib that involve manipulating other scripts, and so could benefit from a -m option.

pdb profile doctest trace modulefinder tabnanny pyclbr dis

In the case of pydoc, unittest (unittest discover, etc.) -- these are special cases, as they interpret input as either a path OR a module via guessing. There may not be any benefit to adding a -m option.

I think this is a reasonble idea, however there is no intrinsic relationship between these modules, so adding -m to each one should be a separate issue. We can use this issue as a master and make the other issues dependencies of this one.

As a new feature any such changes would go into 3.4 at this time.