Установка имени пакета RPM в bdist_rpm

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

Можно ли это сделать в setup.cfg в разделе [bdist_rpm]?

Ответ 1

Ну, это действительно немного нестандартное и поэтому не поддерживается напрямую. Однако вы можете сделать python setup.py bdist_rpm --spec-only, и это приведет к созданию спецификационного файла внутри dist/named project.spec, начинающегося следующим образом:

%define name [name of your pkg as defined in setup.py]
%define version [version of your pkg]
%define unmangled_version [version of your pkg]
%define release 1

Summary: PyQt4 application to download trailers from www.apple.com/trailers
Name: %{name} # THIS IS WHAT YOU WANT TO CHANGE
Version: %{version}
Release: %{release}
Source0: %{name}-%{unmangled_version}.tar.gz

Чтобы успешно построить rpm, вам нужно:

  • переименуйте спецификационный файл в [newname].spec
  • изменить каждое появление% {name} с помощью [newname]
  • rpmbuild -ba [newname.spec] (после размещения файлов в каталогах, где rpmbuild найдет их)

Я уверен, что вы можете каким-то образом автоматизировать это, если вы действительно хотели

Ответ 2

Инструмент fpm упрощает создание пакета RPM и изменение имени или другого параметра. По умолчанию fpm делает RPM с именем python-prefix, но имя пакета можно установить с параметром -n. Пример:

fpm -s python -t rpm -n my_package_name <python-source-library>/setup.py

Ответ 3

Python 2.7 +

В соответствии с документами, python setup.py bdist_rpm --name="new-package-name" должен работать.

Это не похоже на python-2.6, поскольку при попытке выполнить команду вы получите ошибку error: option --name not recognized.

Python 2.6

Я обнаружил, что редактирование setup.py работает:

(...)
setup(
    name = 'new-package-name',
    description = "Python package that does the thing",
(...)

После этого просто запустите python setup.py bdist_rpm, а rpm будет иметь новое имя.