Как отладить установку pip

#debugging #pip #installation #setup.py #pdb

#отладка #pip #установка #setup.py #pdb

Вопрос:

Если я хочу отладить setup.py файл моего пакета packagename устанавливается через «pip install packagename», есть ли способ сделать это? Я попытался загрузить исходный код, добавив set_trace() в setup.py и бежать:

     pip install .
  

Однако, как только я получаю приглашение pdb(), установка завершается с ошибкой:

 processing /Users/skauser/python-ibmdb/IBM_DB/ibm_db
    Complete output from command python setup.py egg_info:
    > /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py(31)<module>()
    -> machine_bits =  8 * struct.calcsize("P")
    (Pdb)
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
        machine_bits =  8 * struct.calcsize("P")
      File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
        machine_bits =  8 * struct.calcsize("P")
      File "/Library/anaconda3/lib/python3.7/bdb.py", line 88, in trace_dispatch
        return self.dispatch_line(frame)
      File "/Library/anaconda3/lib/python3.7/bdb.py", line 113, in dispatch_line
        if self.quitting: raise BdbQuit
    bdb.BdbQuit

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/
  

Хотя я могу отлаживать исходный код через: python setup.py сборка, поведение, которое я хочу отладить, применимо при установке через pip.

Комментарии:

1. Давайте, люди. Практически в любой другой среде менеджер пакетов просто сохраняет файл журнала для детальной проверки после ошибки установки. Или, по крайней мере, предоставляет подробный режим выполнения. Вам действительно нужно подключить отладчик для этого?

Ответ №1:

Pip — это программа на Python. Вы можете видеть, что он доволен cat $(which pip) . Затем вы можете скопировать его в новый файл в каталоге вашего проекта. Например, вот как это выглядит для меня:

Файл mypip.py :

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script.pyw|.exe)?$', '', sys.argv[0])
    sys.exit(main())
  

Затем вы можете добавить точку останова с помощью pdb или использовать PyCharm, как указано в ответе Игоря Юдникова.

Для справки, вот как это выглядит в моем Pycharm введите описание изображения здесь

Ответ №2:

О! Только что нашел решение, это довольно просто. Что такое pip? Это простой файл python, который, я думаю, каким-то образом связан с запуском через python, и под капотом система создает что-то вроде

 python pip install ...
  

итак, сначала нам нужно знать, где находится pip

 which pip
  

говорит

 /Users/me/PycharmProjects/etlscripts/venv/bin/pip
  

Итак, мы можем перейти к Pycharm, создать конфигурацию, подобную

Pycharm запустить конфигурацию

тогда вы сможете перехватить ваше исключение. Приветствия.

Комментарии:

1. У меня не работает, так как pip больше не может найти свои собственные модули (pip 21.0)