В python setup.py, как я могу позволить пользователю устанавливать файлы моего модуля без предварительной сборки? - PullRequest
2 голосов
/ 19 марта 2019

Я создал модуль Python, который включает некоторые функции языка Си. Мои потенциальные пользователи используют MS Windows, а я использую distutils для встраивания функциональности c в файл .pyd.

Я создал файл манифеста, который включает в себя файл .pyd в пакете Python, и все, включая файл .pyd, проверяется в системе контроля версий. Затем пользователи могут вывести его из-под контроля версий и установить модуль.

У большинства пользователей модуля не будет возможности перестроить файл .pyd из исходного кода, потому что у них не установлена ​​Visual Studio, и они не обязательно имеют доступ к библиотекам, необходимым для связывания исходного кода. , Поэтому я хочу, чтобы они могли использовать файл .pyd, который я включаю в пакет.

Проблема в том, что когда пользователь делает python setup.py install, он иногда пытается перестроить файл .pyd, в зависимости от относительных временных отметок файла .pyd и исходных файлов. Я не могу контролировать, какая временная метка будет позже, я думаю, это зависит от того, в каком порядке они выбирают файлы из системы контроля версий.

Как правильно справиться с этой ситуацией?

1 Ответ

2 голосов
/ 19 марта 2019

Правильный способ справиться с этой ситуацией - создать и распространить колесо , помеченное для окон. Это можно сделать в дополнение (или вместо) к выпуску исходного дистрибутива.

pip install --upgrade setuptools wheel
python setup.py build bdist_wheel

Это создаст файл .whl в подкаталоге ./dist/, который вы затем загрузите в индекс (или вы можете отправить пользователям файл дистрибутива напрямую).

Ваши пользователи не будут делать python setup.py install, они будут делать pip install yourmodule, и pip разрешит правильный бинарный дистрибутив, т.е. файл .whl для загрузки и установки на основе платформы времени выполнения. Теги совместимости присутствуют в имени колеса.

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

...