cmake: brp-python-bytecompile 和 python3
cmake: brp-python-bytecompile and python3
我正在尝试使用 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
有两种解决方案:
- 依靠
/bin
hack
- 更改
__python
的默认值
对于解决方案 #1,您只需使用 bin
子文件夹。在 /bin
的子目录中发生的任何 python 字节编译将不会完成:
- `compileall.compile_dir` behavior related to parent directory name
对于解决方案 #2,您只需遵循:
对于 cmake,语法是:
set(CPACK_RPM_SPEC_MORE_DEFINE "%define __python python3")
另请参阅替代解决方案:
几分钟前我遇到过类似的情况。
就我而言,我的开发环境在特定路径使用 python 3,而 linux env 具有 2.7 python bin(即 /usr/bin/python)。
所以,接下来我做了什么:
...
/usr/bin/rpmbuild -bb --define "_python_override ${PYTHON_OVERRIDE}" ...
...
这是一个sh文件,首先计算出python3的路径,并存储在
$PYTHON_OVERRIDE
然后,在规格文件上
%define __python %{_python_override}/python
有了这个,我确保 RPM 使用与我用来编译我的 python 项目相同的版本。
我正在尝试使用 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
有两种解决方案:
- 依靠
/bin
hack - 更改
__python
的默认值
对于解决方案 #1,您只需使用 bin
子文件夹。在 /bin
的子目录中发生的任何 python 字节编译将不会完成:
- `compileall.compile_dir` behavior related to parent directory name
对于解决方案 #2,您只需遵循:
对于 cmake,语法是:
set(CPACK_RPM_SPEC_MORE_DEFINE "%define __python python3")
另请参阅替代解决方案:
几分钟前我遇到过类似的情况。 就我而言,我的开发环境在特定路径使用 python 3,而 linux env 具有 2.7 python bin(即 /usr/bin/python)。
所以,接下来我做了什么:
...
/usr/bin/rpmbuild -bb --define "_python_override ${PYTHON_OVERRIDE}" ...
...
这是一个sh文件,首先计算出python3的路径,并存储在
$PYTHON_OVERRIDE
然后,在规格文件上
%define __python %{_python_override}/python
有了这个,我确保 RPM 使用与我用来编译我的 python 项目相同的版本。