Создание колеса python, включающего файлы svn:externals на Jenkins
Я собираю пакет на Python 2.7.6 32-битной Windows 32
Единственным источником некоторых компонентов пакета является svn 'share'. Обычной практикой в этой компании является включение в ваш проект использования svn:externals.
Обычный способ собрать этот пакет:
python setup.py bdist_wheel
Все выглядит нормально на моей рабочей станции (где я извлек код из TortoiseSVN), но когда я запускаю тот же процесс на Jenkins, процесс bdist_wheel не включает в себя какой-либо файл.py, полученный из svn:externals.
После прочтения документации это происходит из-за функции, которая определяет, какие сценарии являются частью пакета, на основе которых файлы отслеживаются SVN. Похоже, что в результате того, как Дженкинс проверяет файлы, bdist_wheel видит, что я использую SVN, и предполагает, что он знает, как определить, какие файлы отслеживаются, но получает неправильный ответ.
Что мне нужно, так это способ не дать команде bdist_wheel попытаться угадать, какие файлы мне нужны (на самом деле я хочу, чтобы каждый файл.py в проекте был включен, независимо от того, как он был введен)
Я попытался указать нужные мне файлы, используя файл MANIFEST.in, но это не сработало.
recursive-include externals *.py
В этом примере 'externals' - это каталог верхнего уровня в моем дереве исходных текстов, который содержит файл init.py и несколько каталогов svn: external'd. Только файл инициализации можно увидеть во встроенном файле whl.
К сожалению, это приводит к тому, что файлы.py ведут себя так, как будто они являются данными, в журнале я вижу это:
copying build\lib\externals\security\credentials.py -> build\bdist.win32\wheel\foopackage-0.0.4.data\..\externals\security
Это явно не реальное решение!
Pip, Virtualenv и все соответствующие инструменты находятся в последних стабильных версиях.
1 ответ
Оказывается, эта проблема вызвана тем, что Jenkins использует очень старый стандарт SVN (1.4) для своих собственных репозиториев. Переход на 1.7 исправляет это поведение.