Am 22.11.22 um 10:03 schrieb Johannes
Kastl:
Hi
Ben,
thanks for taking the time to answer. Appreciated!
On 22.11.22 at 09:50 Ben Greiner wrote:
`%primary_python` affects the behavior
and contents of the python310{,-base} packages. The
definition for the primary interpreter is where
/usr/bin/python3 points to. Thus, for having any effect, you
have to rebuild pythin310{,-base} too. Once you have this,
every python module in your stack which you rebuild yourself
will have a `Provides: python3-foo` and override the
python3-foo for Python 3.6. OTOH, this will require a lot of
"Prefer:" lines, because the distro will now have multiple
providers of python3-foo. Otherwise I do not see why
`%primary_python` would need to be set at all.
Objections, your honour! :-)
I am not building the python310 packages, those are delivered
by Leap/SLES. And they do not change the default python (i.e.
where /usr/bin/python3 links to) and should not.
Then you should not redefine %primary_python to python310!
I still do not get why?
If this only affects the python310 and python310-base packages
during build and I am not rebuilding them, there is no negative
impact?
It depends which specfiles from Factory you did reuse:
bmwiedemann/openSUSE> git grep primary_python
packages/_/_project/_config:%define primary_python python310
packages/_/_project/_config:%primary_python python310
packages/p/python-ctypeslib2/python-ctypeslib2.spec:%define primary_python3
python%{python3_version_nodots}
packages/p/python-ctypeslib2/python-ctypeslib2.spec:Provides:
%{primary_python3}-ctypeslib2 =
%{version}-%{release}
packages/p/python-ctypeslib2/python-ctypeslib2.spec:Obsoletes:
%{primary_python3}-ctypeslib2
< %{version}-%{release}
packages/p/python-flit-core/.rev:
<comment>- Use prjconf provided primary_python if available
packages/p/python-flit-core/python-flit-core.changes:- Use prjconf
provided primary_python if available
packages/p/python-flit-core/python-flit-core.spec:# fallback if primary_python is not
available from the project configuration
packages/p/python-flit-core/python-flit-core.spec:%{?!primary_python:%define primary_python
python3%{?!sle_version:10}}
packages/p/python-flit-core/python-flit-core.spec:%define pprefix
%{primary_python}
packages/p/python-flit-core/python-flit-core.spec:%define pythons
%{primary_python}
packages/p/python-flit-core/python-flit-core.spec:%{expand:%%define
skip_%{primary_python} 1}
packages/p/python-flit-core/python-flit-core.spec:#!BuildIgnore:
%{primary_python}-packaging
packages/p/python-packaging/python-packaging.spec:# fallback if primary_python is not
available from the project configuration
packages/p/python-packaging/python-packaging.spec:%{?!primary_python:%define primary_python
python3%{?!sle_version:10}}
packages/p/python-packaging/python-packaging.spec:%define pprefix
%{primary_python}
packages/p/python-packaging/python-packaging.spec:%define pythons
%{primary_python}
packages/p/python-packaging/python-packaging.spec:%{expand:%%define
skip_%{primary_python} 1}
packages/p/python-packaging/python-packaging.spec:Requires:
%{primary_python}-pyparsing
>= 2.0.2
packages/p/python-pyparsing/.rev:- Remove
hardcoded primary_python variable.
packages/p/python-pyparsing/python-pyparsing.changes:- Remove
hardcoded primary_python variable.
packages/p/python-pyparsing/python-pyparsing.spec:%define pprefix
%{primary_python}
packages/p/python-pyparsing/python-pyparsing.spec:%define pythons
%{primary_python}
packages/p/python-pyparsing/python-pyparsing.spec:%{expand:%%define
skip_%{primary_python} 1}
packages/p/python-qtconsole/python-qtconsole.spec:%if
"%{python_flavor}" == "%{primary_python}"
packages/p/python310/.rev: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python310/python310.changes: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python310/python310.spec:%if
"%{python_pkg_name}" == "%{primary_python}"
packages/p/python311/.rev: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python311/python311.changes: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python311/python311.spec:%if
"%{python_pkg_name}" == "%{primary_python}"
packages/p/python38/.rev: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python38/python38.changes: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python38/python38.spec:%if
"%{python_pkg_name}" == "%{primary_python}"
packages/p/python39/.rev: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python39/python39.changes: %primary_python
(gh#openSUSE/python-rpm-macros#127).
packages/p/python39/python39.spec:%if
"%{python_pkg_name}" == "%{primary_python}"
If you did not branch any of these, don't bother. %primary_python is
not used by any of the python-rpm-macros.
And inside "my packages", everything just seems to work? I do not
want those packages to use the default python (which is 3.6) and I
do not want to replace it with 3.10. The SLES-packages are
apparently built in a way, that they can be installed in parallel
without changing the default python.
The crucial part is the redefinition of %pythons and that you are
properly expanding "singlespec" through %python_subpackages, even
though the expansion only contains one entry.
For everything else, change python3- to
python310-, either directly or thourgh a macro-redirection like
%mypython.
Then I would need to also add some if-condition to set this
mypython macro inside the spec for Tumbleweed, where I cannot
change the prjconf.
And hardcoding python310- will break, once Tumbleweed switches to
python311 as its default python. But piggybacking on
%primary_python everything works automagically (at least I hope
so...).
Hence the non-singlespec packages in Tumbleweed using the python3-
alias for the primary interpreter.
Change your non-singlespec packages to:
%if 0%{?suse_version} < 1550
%define mypython python310
%define __mypython %__python310
%define mypython_sitelib %python310_sitelib
# and so on, whatever is used in the specfile
%else
%define mypython python3
%define __mypython %__python3
%define
mypython_sitelib %python3_sitelib
# and so on, whatever is used in the specfile
%endif
BuildRequires: %{mypython}-foo
Requires: %{mypython}-foo
%files
%{mypython_sitelib}/foo
%{mypython_sitelib}/foo-%{version}*-info
The singlespec stuff works by just changing %pythons in the prjconf.
- Ben