Intellij/Pycharm не может отлаживать модули Python

Я использую PyCharm/ IntelliJ публикации сообщества из wile для написания и отладки скриптов Python, но теперь я пытаюсь отладить модуль Python, а PyCharm выполняет неправильный синтаксический анализ команд командной строки, вызывая ошибку выполнения, или, может быть, я создаю плохую конфигурацию.

Это моя конфигурация запуска/отладки:

IntelliJ run/debug Python module configuration

И это выполняется, когда я запускаю модуль (здесь нет проблем):

/usr/bin/python3.4 -m histraw

Но когда я отлаживаю, это вывод в консоли IntelliJ:

/usr/bin/python3.4 -m /opt/apps/pycharm/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 57851 --file histraw
/usr/bin/python3.4: Error while finding spec for '/opt/apps/pycharm/helpers/pydev/pydevd.py' (<class 'ImportError'>: No module named '/opt/apps/pycharm/helpers/pydev/pydevd')

Process finished with exit code 1

Как вы можете видеть, параметры ошибочны, а после -m опция IntelliJ debug script передается перед именем модуля.

Я также попробовал просто поместить -m histraw в поле script, но не работает, это поле предназначено только для путей Python script, а не для модулей.

Любые идеи?

Ответы

Ответ 1

Есть еще один способ заставить его работать. Вы можете написать python script для запуска вашего модуля. Затем просто настройте PyCharm для запуска этого script.

import sys
import os
import runpy
path = os.path.dirname(sys.modules[__name__].__file__)
path = os.path.join(path, '..')
sys.path.insert(0, path)
runpy.run_module('<your module name>', run_name="__main__",alter_sys=True)

Затем работает отладчик.

Ответ 2

Мне было проще создать файл начальной загрузки (debuglaunch.py) со следующим содержимым.

from {package} import {file with __main__}

if __name__ == '__main__':
    {file with __main__}.main()

Например, чтобы запустить locustio в отладчике pycharm, я создал debuglaunch.py, например:

from locust import main

if __name__ == '__main__':
    main.main()

И настроил pycharm следующим образом.

pycharm_debug_config

ПРИМЕЧАНИЕ. Я обнаружил, что не смог войти в отладчик, если не добавить точку останова на main.main(). Однако это может быть специфично для locustio.