【问题标题】:Python RPM package generation fails with 'rpm: -ba: unknown option' - rpmbuild is availablePython RPM 包生成失败并出现“rpm:-ba:未知选项” - rpmbuild 可用
【发布时间】:2020-04-07 19:51:54
【问题描述】:

我的问题与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 上搜索了所有结果,但结果并不多,最接近的是开头链接的 Stackoverflow 问题。那是在 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

【问题讨论】:

  • 一个很好的起点是阅读github.com/python/cpython/blob/master/Lib/distutils/command/…,这是实际调用rpmbuild的代码(或者,在你的情况下,显然是rpm)。
  • ..请注意,在 distutils 的 master 分支(上面链接)中,它不再有任何以 rpm 开头的代码路径,并且 only 运行 rpmbuild .你运行的是哪个版本的distutils
  • 感谢有用的提示!我怎么知道distutils的版本?它没有在pip list 中列出,我应该去哪里看?
  • OS X 附带 Python 2.7.16,然后我安装了 pyenv 并用它来安装 Python 3.7.7
  • import distutils; print distutils.__version__,在你用来运行setup.py的Python解释器的repl中。

标签: python python-3.x rpm rpmbuild python-packaging


【解决方案1】:

问题在于 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 副本。

【讨论】:

  • 哇,确实。即使使用sudo,OS X 上的 SIP 也不允许我对其进行符号链接。我宁愿修补我的副本 o bdist_rpm 或升级到另一个版本的 Python。
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
相关资源
最近更新 更多