Создайте конфигурацию PyCharm, которая запускает модуль a la "python -m foo"
Моя точка входа python должна запускаться как модуль (а не script), как в:
python -m foo.bar
Не работает (и не предполагается) следующее:
python foo/bar.py
Как я могу создать confirguration для запуска в pycharm, который запускает мой код, используя первое invokation выше?
Ответы
Ответ 1
В соответствии с man python
параметр -m
-m имя-модуля
Ищет sys.path для именованного модуля и запускает соответствующий .py файл как script.
Поэтому большую часть времени вы можете просто щелкнуть правой кнопкой мыши по bar.py
в окне инструмента проекта и выбрать Run bar
.
Если вам действительно нужно использовать параметр -m
, укажите его как опцию Интерпретатор с именем модуля как Script в диалоговом окне "Редактирование конфигураций":
![enter image description here]()
Ответ 2
Существует обходной путь, который я использую для своих скриптов, которые используют относительный импорт.
python -m фактически вызывает script, называемый runpy.py, который является частью стандартной установки Python. Эти два вызова эквивалентны:
python -m my_module.a.b module_arguments
python python_lib_directory/runpy.py my_module.a.b module_arguments
Используйте последний метод для настройки конфигурации запуска/отладки:
Script: python_lib_directory/runpy.py
Script параметры: my_module.a.b module_arguments
Параметры интерпретатора: (оставьте поле пустым, не требуется -m)
Ответ 3
В PyCharm 2016 указание -m
без пути script не работает, поскольку они используют оболочку script, которая не принимает аргумент -m
.
Здесь мое решение, которое работает для запуска и отладки конфигураций: https://github.com/amnong/misc/tree/master/pycharm_runner
Изменить: я просто прочитал комментарий Дж. Р. Петруса, и мое решение очень похоже. BTW Я также пытался поддерживать правильные точки входа с помощью pkg_resources
, но по какой-то причине pkg_resources.load_entry_point()
не смог найти распределение моего проекта...
Ответ 4
IntelliJ IDEA/PyCharm 2017
Поле "Script" является необязательным в последних версиях IDE JetBrains. Указание -m foo.bar
в параметрах Script достаточно:
![введите описание изображения здесь]()