Create a PyCharm configuration that runs a module a la "python -m foo"

My python entrypoint needs to be run as a module (not a script), as in:

python -m foo.bar

The following does not work (and is not supposed to):

python foo/bar.py

How can I create a run confirguration in pycharm that runs my code using the first invokation above?


Solution 1:

In 2018.1 it is finally possible to specify the module name instead of the script path in the UI. There is a dropdown for changing it, to the left of the input field.

PyCharm Run Configuration

Solution 2:

There is a workaround I use for my scripts, which do use relative imports.

python -m actually invokes a script called runpy.py which is part of a standard Python installation. These two invocations are equivalent:

python -m my_module.a.b module_arguments
python python_lib_directory/runpy.py my_module.a.b module_arguments

Use the latter method to setup your Run/Debug Configuration:

Script: python_lib_directory/runpy.py

Script parameters: my_module.a.b module_arguments

Interpreter options: (leave blank, no -m required)