Я работаю над расширениями Swift для Python 2. Поскольку distutils/setuptools поддерживают только расширения C/C++, я нахожусь на крючке, чтобы изменить команды сборки, чтобы они создавали код Swift.
Мои python setup.py build
и python setup.py install
выглядят успешными: пакет и его содержимое находятся в правильном расположении, а собственные расширения загружаются правильно при import
.
Однако моя команда предпочитает использовать pip install -e.
, что в конечном итоге делает python setup.py develop
, чтобы немного ускорить разработку; и как он стоит, setup.py
не знает, чтобы скопировать нативные библиотеки, которые build
компилирует в исходных каталогов.
В моей текущей настройке:
SwiftBuildExt
(который расширяет класс Cython, потому что мы поддерживаем языковое разнообразие)...run
переопределение для создания модулей Swift, которые динамически обнаруживаются с помощью glob
.run
добавляет записи в список, который я назову swift_modules
;get_output
после run
переопределяется для возврата базовых файлов и swift_modules
. Что мне нужно изменить, чтобы заставить develop
работать?
Я нашел, что это чтение источника для setuptools.command.develop
: develop
запускает build_ext
команду с inplace
параметром, который говорит build_ext
сохранить вывод сборки в исходном дереве. Этот параметр, как и ожидалось, можно протестировать с помощью self.inplace
из подкласса build_ext
. Оттуда, это только вопрос изменения места, где копируются файлы.
В Python 3 он обрабатывается по-другому, что я не исследовал.