setuptools, заранее узнай имя колеса собственной библиотеки - PullRequest
3 голосов
/ 11 марта 2020

Существует ли простой способ узнать имя файла колеса Python перед запуском сценария установки?

Я пытаюсь сгенерировать правило Базеля, которое создает .whl для каждой Python версии. Установленная на компьютере, библиотека содержит собственный код, поэтому ее необходимо компилировать для каждой версии отдельно. Дело в том, что Bazel требует предварительного объявления любых выходных данных, и я наблюдаю, что каждая версия Python генерирует разные имена файлов без явной согласованности (разные префиксы для mallo c и unicode)

2.7  --> lib-0.0.0-cp27-cp27mu-linux_x86_64.whl
3.6m --> lib-0.0.0-cp36-cp36m-linux_x86_64.whl
3.8  --> lib-0.0.0-cp36-cp38-linux_x86_64.whl

Я знаю, как обходной путь, я мог бы застегнуть колесо, чтобы обойти его, но мне было интересно, есть ли более чистый способ сделать это.

1 Ответ

3 голосов
/ 12 марта 2020

Обновление

См. Также более подробный ответ здесь .

Вы можете получить имя, запросив команду bdist_wheel, поскольку вы даже не нужно что-то построить или написать скрипт setup.py (но вам нужны метаданные, которые вы передаете в функцию setup). Пример:

from distutils.core import Extension
from setuptools.dist import Distribution


fuzzlib = Extension('fuzzlib', ['fuzz.pyx'])  # the files don't need to exist
dist = Distribution(attrs={'name': 'so', 'version': '0.1.2', 'ext_modules': [fuzzlib]})
bdist_wheel_cmd = dist.get_command_obj('bdist_wheel')
bdist_wheel_cmd.ensure_finalized()

distname = bdist_wheel_cmd.wheel_dist_name
tag = '-'.join(bdist_wheel_cmd.get_tag())
wheel_name = f'{distname}-{tag}.whl'
print(wheel_name)

напечатает вам нужное имя. Обратите внимание, что attrs, переданный в Distribution, должен содержать те же метаданные, которые вы передаете в функцию setup, иначе вы, вероятно, получите неправильный тег. Чтобы повторно использовать метаданные, в сценарии setup.py это можно объединить, например,

setup_kwargs = {'name': 'so', 'version': '0.1.2', ...}

dist = Distribution(attrs=setup_kwargs)
...
setup(**setup_kwargs)
...