Начните с просмотра исходного кода этих модулей; переключатель -m
ищет пакет или модуль для импорта первым. Если это пакет, Python импортирует модуль __main__
в этот пакет и запускает его как основной скрипт. Если это модуль, сам модуль импортируется и запускается как __main__
.
Обычно код структурирован так, что вызывается функция, которую вы также можете импортировать напрямую. Затем вы можете просто написать код, который импортирует ту же функцию и вызывает ее так же, как и модуль __main__
. С этого момента тривиально запустить его в отладчике.
Например, pip
- это пакет, поэтому python -m pip
импортирует pip.__main__
и запускает его как скрипт. Затем запускается:
from pip._internal.cli.main import main as _main # isort:skip # noqa
if __name__ == '__main__':
sys.exit(_main())
для запуска. Вы можете сделать то же самое в VSCode; импортируйте pip._internal.cli.main.main
и вызывайте его.
Вы можете найти исходный код для этих модулей, просто импортировав их и распечатав получившийся объект:
python -c "import pip; print(pip)"
представление модуля, если он загружен с диска, будет включать его имя файла. Если имя файла оканчивается на /__init__.py
, это пакет, поэтому вы также можете проверить, существует ли файл __main__.py
:
python -c "import pip.__main_; print(pip.__main__)"
Вы можете сделать то же самое для модуля venv
. Эта часть является частью стандартной библиотеки Python, поэтому документация на самом деле напрямую связана с исходным кодом , а модуль venv.__main__
просто импортирует venv.main()
и называет это.