Как отладить pip install

Вопрос или проблема

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

pip install .

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

Обработка /Users/skauser/python-ibmdb/IBM_DB/ibm_db
    Полный вывод команды 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)
    Последний вызов, который завершился с ошибкой:
      Файл "<string>", строка 1, в <module>
      Файл "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", строка 31, в <module>
        machine_bits =  8 * struct.calcsize("P")
      Файл "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", строка 31, в <module>
        machine_bits =  8 * struct.calcsize("P")
      Файл "/Library/anaconda3/lib/python3.7/bdb.py", строка 88, в trace_dispatch
        return self.dispatch_line(frame)
      Файл "/Library/anaconda3/lib/python3.7/bdb.py", строка 113, в dispatch_line
        if self.quitting: raise BdbQuit
    bdb.BdbQuit

    ----------------------------------------
Команда "python setup.py egg_info" завершилась с ошибкой с кодом 1 в /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/

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

С нетерпением жду рекомендаций. Спасибо!

На этот вопрос, похоже, уже ответили на Stack Overflow, хотя ответ там не был принят.

.

Ответ или решение

Как отладить установку пакета с помощью pip

Debugging installation issues with pip can be a complex process, especially when you want to inspect the inner workings of a package’s setup.py script. Below is a thorough guide to help you debug the installation of a package through pip, specifically for the scenario you’ve described.

1. Понимание проблемы

Когда вы пытаетесь использовать set_trace() из модуля pdb в вашем setup.py, установка прерывается при входе в отладчик. Это происходит потому, что pip запускает команду setup.py egg_info в контексте, который не поддерживает интерактивный ввод. Следовательно, при попадании в pdb, выполнение завершится с ошибкой bdb.BdbQuit.

2. Альтернативные методы отладки

2.1 Локальное развертывание

Вместо попытки установить пакет напрямую с помощью pip, вы можете:

  1. Клонировать репозиторий: Скачайте исходный код вашего пакета, используя Git или другой метод.

  2. Запустить отладку вручную:

    • Перейдите в папку с исходным кодом.
    • Запустите установку с использованием обычной команды Python:
      python setup.py install
    • Это позволяет вам использовать pdb как обычно:
      import pdb; pdb.set_trace()
    • Таким образом, вы сможете исследовать переменные, стек вызовов и поведение кода, не сталкиваясь с ограничениями pip.

2.2 Использование режима разработки

Если вы хотите сохранить изменение кода и его немедленное использование, использование режима разработки может быть более удобным способом:

  1. Перейдите в каталог вашего проекта.
  2. Запустите следующую команду:
    pip install -e .

    Эта команда установит пакет в режиме разработки, что позволит вам разрабатывать и тестировать изменения без необходимости переустановки пакета.

3. Логгирование и отладочные сообщения

Если отладка через pdb не позволяет получить необходимую информацию, рассмотрите возможность добавления логгирования:

  1. Импортируйте модуль logging и настройте его в setup.py.
  2. Например:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    logging.debug('Debugging setup.py')

Это позволит вам записывать полезные сообщения о ходе выполнения в консоль или в файл журнала, что может быть крайне полезно для диагностики проблем без необходимости использования отладчика.

4. Устранение распространённых ошибок

Если установка завершилась неудачно, рассмотрите следующие аспекты:

  • Переменные окружения: Убедитесь, что ваши пути к библиотекам и интерпретатору Python настроены корректно.
  • Правильные зависимости: Убедитесь, что все зависимости пакета установлены и соответствуют необходимым версиям.
  • Версии Python: Проверьте, что вы используете совместимую версию Python с вашим пакетом.

5. Использование виртуальных окружений

Изолируйте ваше тестирование, создавая виртуальные окружения. Это позволит вам не загрязнять глобальную среду и упростит отладку:

python -m venv myenv
source myenv/bin/activate  # На Unix
myenv\Scripts\activate  # На Windows
pip install -e .

6. Заключение

Отладка установки пакета через pip может быть сложной, но, используя подходы, описанные выше, можно существенно облегчить этот процесс. Оптимизируя установку пакета, добавляя логгирование и работая в режиме разработки, вы получите возможность более эффективно выявлять и устранять проблемы в коде вашего setup.py.

Оцените материал
Добавить комментарий

Капча загружается...