cmake:brp-python-bytecompile和python3

3ks5zfa0  于 2023-05-23  发布在  Python
关注(0)|答案(3)|浏览(206)

我正在尝试使用cpack(cmake)创建一个python3包。由于某种原因,它失败了,并显示了一条神秘的消息:

+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
error: Bad exit status from /var/tmp/rpm-tmp.rt2mTp (%install)
    Bad exit status from /var/tmp/rpm-tmp.rt2mTp (%install)
 ***
CPackRPM:Debug:    - /mnt/source/bin2/_CPack_Packages/Linux/RPM/rpmbuildsource-python.out
CPackRPM:Debug: *** Building target platforms: x86_64
Building for target x86_64
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.mxEjdh
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.rt2mTp
Compiling /mnt/source/bin/_CPack_Packages/Linux/RPM/project-0.0.8-Linux/python/usr/lib/python3/dist-packages/project/__init__.py ...
  File "/usr/lib/python3/dist-packages/project/__init__.py", line 27
    raise ValueError(f"Not a {obj.__class__.__name__} reference")
                                       ^
SyntaxError: invalid syntax

有没有一种方法可以跳过brp-python-bytecompile步骤,或者有没有一种方法可以指示cpack Python包只针对python3
供参考:

# head -1 source/python/__init__.py
#!/usr/bin/env python3
1rhkuytd

1rhkuytd1#

有两种解决方案:

  1. /bin破解
    1.更改__python的默认值
    对于解决方案#1,您只需要使用bin子文件夹。任何发生在/bin子目录中的python字节编译都不会被执行:

对于解决方案#2,您只需遵循以下步骤:

  • 更改/不再使用自动Python字节编译

对于cmake,语法是:

set(CPACK_RPM_SPEC_MORE_DEFINE "%define __python python3")

另请参阅替代解决方案:

ymdaylpp

ymdaylpp2#

几分钟前我也遇到过类似的情况。在我的例子中,我的开发环境在特定的路径上使用python 3,而linux env有2.7 python bin(即/usr/bin/python)。
接下来我做的是:

...
/usr/bin/rpmbuild -bb --define "_python_override ${PYTHON_OVERRIDE}" ...
...

该文件首先计算python3的路径并将其存储在

$Python_Override

然后,在规格文件上

%define __python %{_python_override}/python

这样,我就可以确保RPM使用与我编译Python项目时使用的相同版本。

bbuxkriu

bbuxkriu3#

我最近遇到了同样的问题,我可以跳过brp-python-bytecompile步骤,并使用以下内容:set(CPACK_RPM_SPEC_MORE_DEFINE“%undefine __python”)

相关问题