Re: Python version dependencies in pkg

From: Alexander Leidinger <Alexander_at_leidinger.net>
Date: Thu, 29 Sep 2022 06:39:39 UTC
Quoting Rainer Hurling <rhurlin@gwdg.de> (from Thu, 29 Sep 2022  
06:43:49 +0200):

> Hi Dan,
>
> Am 28.09.22 um 23:01 schrieb Dan Mahoney:
>>
>>
>>> On Sep 26, 2022, at 20:22, Kevin Oberman <rkoberman@gmail.com  
>>> <mailto:rkoberman@gmail.com>> wrote:
>>>
>>> On Mon, Sep 26, 2022, 18:13 Dan Mahoney <freebsd@gushi.org  
>>> <mailto:freebsd@gushi.org>> wrote:
>>>
>>>
>>>
>>>>    On Sep 26, 2022, at 09:27, Kevin Oberman <rkoberman@gmail.com
>>>>    <mailto:rkoberman@gmail.com>> wrote:
>>>>
>>>>    On Mon, Sep 26, 2022 at 2:58 AM Dan Mahoney <freebsd@gushi.org
>>>>    <mailto:freebsd@gushi.org>> wrote:
>>>>
>>>>        All,
>>>>
>>>>        A quick question:
>>>>
>>>>        If a pkg depends on python, but not a specific version, it
>>>>        will simply pick a version to install (I guess, whatever
>>>>        version was the default when the pkg was built, 3.8 right
>>>>        now), correct?
>>>>
>>>>        If you have 3.9 installed, that will satifsfy dependencies,
>>>>        and it won't install python3.8, correct? Or are the dependent
>>>>        versions for interpretec languages in pkg locked to whatever
>>>>        the default is?
>>>>
>>>>        Assuming "any python will work", If you have 3.8 installed,
>>>>        and later install 3.9 -- is there any easy way to point your
>>>>        package at the new version as the new dependency, without
>>>>        deinstalling/reinstalling it?
>>>>
>>>>        -Dan
>>>>
>>>>
>>>>    It will use the version specified as default in
>>>>    /usr/ports/Mk/bsd.default-versions.mk
>>>>    <http://bsd.default-versions.mk/>.
>>>
>>>    To be clear, I'm talking about pkg install, not port building.
>>>
>>>    So I understand -- that value is somehow baked in to the package
>>>    tree somewhere?  Because pkg alone doesn't look at the ports tree
>>>    on the installing machine(you do not need to have ports extracted
>>>    to install packages), nor do I believe it looks at make.conf,
>>>
>>>    If so, where in pkg do I find the default version?  Is it
>>>    somewhere in the repository that's fetched before I install any
>>>    packages?
>>>
>>>    -Dan
>>>
>>>
>>> You are correct.  But the packages are built using the same  
>>> Makefile and the same defaults as when built from ports for the  
>>> specified version of FreeBSD as if it was built from ports. The Mk  
>>> files are updated with ports, so all packages change when the  
>>> change is committed to the defaults file, though they will only  
>>> take effect when the quarter changes unless you're using LATEST  
>>> packages.
>>
>> Okay, so in either the package file, or the repo file, is there a  
>> bit that says "whatever is the default" or that explicitly says "if  
>> there's not a python, install 3.8"?
>
> There is PYTHON_DEFAULT (set to 3.9 ATM) in  
> ports/Mk/bsd.default-versions.mk. You can override this for example  
> by an entry in /etc/make.conf:
>
> DEFAULT_VERSIONS+= python=3.10 python3=3.10
>
>>
>> I realize I'm asking weird minute questions, but I'm noticing that  
>> across our fleet we have some blend of machines that are 3.7, 3.8,  
>> and 3.9, and trying to just remove 3.7 attempts to deinstall  
>> packages that would work with 3.8.
>
> To update from one Python version to another, there are descriptions  
> in /usr/ports/UPDATING, see entry from 20220626.
>
> After changing Python itself (i.e. from 3.7 to 3.9), rebuilding  
> depending py3x-packages will do this version change for you (i.e.  
> from py3.7-* to py3.9-*, ...). It works via the so called flavors.

To extend a little bit on that:
"pkg info | grep py3" will give you a list of ports which are  
depending on a specific python version. If it lists py37-xxx it means  
the xxx port depends upon python 3.7. If you then delete python 3.7  
pkg will also ask you if it is ok to delete all the py37-* ports.

So for a given system with already installed ports it is not simply  
installing python 3.9 and deleting 3.7. It is also updating all the  
ports which depend upon 3.7.

Bye,
Alexander.

-- 
http://www.Leidinger.net Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF
http://www.FreeBSD.org    netchild@FreeBSD.org  : PGP 0x8F31830F9F2772BF