Python RPM 包生成失败 'rpm: -ba: unknown option' - rpmbuild 可用
Python RPM package generation fails with 'rpm: -ba: unknown option' - rpmbuild is available
我的问题与 this one 非常相似。但是有几个关键点不一样,那边的解决方案不行。
我有一个简单的 Python 3 项目,其中包含一些简单的 类。我需要将此项目打包为 RPM 并将其发布到私人仓库。
环境:
Mac OS X 10.15.3 (Catalina)
Python 3.7.3
rpm 4.15.1
Package Version
----------------- -------
astroid 2.3.3
coverage 5.0.4
isort 4.3.21
lazy-object-proxy 1.4.3
mccabe 0.6.1
pip 20.0.2
pylint 2.4.4
setuptools 46.1.3
six 1.12.0
typed-ast 1.4.1
wheel 0.34.2
wrapt 1.11.2
我在项目根目录下有一个setup.py文件:
import setuptools
with open("README.md", "r") as fh: # README.md exists alongside, is readable and has few ASCII text
long_description = fh.read()
setuptools.setup(
name="my_util",
version="0.2.0",
author="Andrei Rinea",
author_email="my@email.com",
description="Utils",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://example.com/",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3.7",
"Operating System :: OS Independent",
"License :: Other/Proprietary License"
],
python_requires='>=3.7',
license='(C) ACME Example 2020',
platforms='any'
)
当我运行
python setup.py bdist_rpm
我最后遇到了一个错误:
... (successfully making directories, copying files etc.)
...
copying dist/my_util-0.2.0.tar.gz -> build/bdist.macosx-10.15-x86_64/rpm/SOURCES
building RPMs
rpm -ba --define _topdir /Users/andrei/Work/my-util/build/bdist.macosx-10.15-x86_64/rpm --clean build/bdist.macosx-10.15-x86_64/rpm/SPECS/my_util.spec
rpm: -ba: unknown option
error: command 'rpm' failed with exit status 1
rpmbuild
在路径中可用:
% rpmbuild --version
RPM version 4.15.1
我搜索了整个 Google 但结果不多,最接近的是开头链接的 Whosebug 问题。那个在 Linux 上,似乎为那个人安装了 rpm-build(似乎包含在 OS X 上的 rpm 中)。
后期编辑:Distutils 版本:
% python3
Python 3.7.3 (default, Nov 15 2019, 04:04:52)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils
>>> print (distutils.__version__)
3.7.3
问题是 distutils 3.7.3 仅在 /bin
或 /usr/bin
中使用 rpmbuild
,如您所见 in its source code:
rpm_cmd = ['rpm']
if os.path.exists('/usr/bin/rpmbuild') or \
os.path.exists('/bin/rpmbuild'):
rpm_cmd = ['rpmbuild']
如果您可以将其符号链接到该位置,那可能是最简单的答案。否则,您可能需要修补 bdist_rpm.py
.
的副本
我的问题与 this one 非常相似。但是有几个关键点不一样,那边的解决方案不行。
我有一个简单的 Python 3 项目,其中包含一些简单的 类。我需要将此项目打包为 RPM 并将其发布到私人仓库。
环境:
Mac OS X 10.15.3 (Catalina)
Python 3.7.3
rpm 4.15.1
Package Version
----------------- -------
astroid 2.3.3
coverage 5.0.4
isort 4.3.21
lazy-object-proxy 1.4.3
mccabe 0.6.1
pip 20.0.2
pylint 2.4.4
setuptools 46.1.3
six 1.12.0
typed-ast 1.4.1
wheel 0.34.2
wrapt 1.11.2
我在项目根目录下有一个setup.py文件:
import setuptools
with open("README.md", "r") as fh: # README.md exists alongside, is readable and has few ASCII text
long_description = fh.read()
setuptools.setup(
name="my_util",
version="0.2.0",
author="Andrei Rinea",
author_email="my@email.com",
description="Utils",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://example.com/",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3.7",
"Operating System :: OS Independent",
"License :: Other/Proprietary License"
],
python_requires='>=3.7',
license='(C) ACME Example 2020',
platforms='any'
)
当我运行
python setup.py bdist_rpm
我最后遇到了一个错误:
... (successfully making directories, copying files etc.)
...
copying dist/my_util-0.2.0.tar.gz -> build/bdist.macosx-10.15-x86_64/rpm/SOURCES
building RPMs
rpm -ba --define _topdir /Users/andrei/Work/my-util/build/bdist.macosx-10.15-x86_64/rpm --clean build/bdist.macosx-10.15-x86_64/rpm/SPECS/my_util.spec
rpm: -ba: unknown option
error: command 'rpm' failed with exit status 1
rpmbuild
在路径中可用:
% rpmbuild --version
RPM version 4.15.1
我搜索了整个 Google 但结果不多,最接近的是开头链接的 Whosebug 问题。那个在 Linux 上,似乎为那个人安装了 rpm-build(似乎包含在 OS X 上的 rpm 中)。
后期编辑:Distutils 版本:
% python3
Python 3.7.3 (default, Nov 15 2019, 04:04:52)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils
>>> print (distutils.__version__)
3.7.3
问题是 distutils 3.7.3 仅在 /bin
或 /usr/bin
中使用 rpmbuild
,如您所见 in its source code:
rpm_cmd = ['rpm']
if os.path.exists('/usr/bin/rpmbuild') or \
os.path.exists('/bin/rpmbuild'):
rpm_cmd = ['rpmbuild']
如果您可以将其符号链接到该位置,那可能是最简单的答案。否则,您可能需要修补 bdist_rpm.py
.