Как проверить колеса Python на CI - PullRequest
1 голос
/ 05 июля 2019

Я выполняю свои тесты на конвейерах Azure (но то же самое относится и к Travis и Appveyor).У меня есть пакет Python, назовем его calculator, который содержит расширения Cython.Когда я отправляю в свой репозиторий, серверы CI клонируют мой пакет и устанавливают его, используя python setup.py develop, а затем запускают pytest для запуска тестов.Запуск python setup.py develop создает расширения на месте, поэтому общие объекты находятся в реальном каталоге.Поэтому, когда мои юнит-тесты запускаются import calculator, cwd является исходным каталогом, поэтому используются фактические копии скриптов python, которые содержат общие объектные файлы прямо здесь, так что все работает нормально.

Теперь яхочу заменить python setup.py develop на python setup.py install.Теперь расширения больше не встраиваются в текущий исходный каталог, а упаковываются и устанавливаются в путь к Python.Однако, когда pytest вызывается после установки, python все равно может найти модуль calculator в рабочем каталоге и (я думаю) игнорирует правильно установленный модуль calculator.И поскольку расширения не были встроены на месте, тесты не выполняются, говоря, что модуль расширения не найден.

Причина, по которой я хочу это сделать, заключается в том, что у меня также настроены колеса для сборки на CI-серверах.Когда я собираю колесо, я также хотел бы убедиться, что ничего не пошло не так, установить это колесо и провести на нем тесты.Аналогично python setup.py install, я предполагаю, что модуль calcualtor в рабочем каталоге имеет приоритет над моим установленным колесом и приводит к ошибкам импорта расширений.

Как люди обычно справляются с этим?

1 Ответ

0 голосов
/ 06 июля 2019

Я прочитал довольно много об этом после публикации этого вопроса, и проблема связана с тем фактом, что Python автоматически добавляет рабочий каталог в sys.path. Поскольку для серверов CI рабочий путь установлен в исходный каталог, фактические исходные файлы имеют приоритет над установленной библиотекой. Есть два решения:

  1. Мы можем переключить пакет на макет src, что означает просто переименование типичного соглашения моего пакета калькулятора, содержащего исходные файлы, с calculator на src. Для этого необходимо, чтобы настройка была правильно настроена, и чтобы каталог src содержал один каталог с именем calculator. Это, на мой взгляд, некрасиво, поэтому я выбрал гораздо более простой вариант
  2. просто удалите или переименуйте исходный каталог на сервере CI, чтобы пакет не мог быть найден в рабочем каталоге. В моем конкретном случае я просто запустил mv calculator src перед выполнением моих тестов.
...