Re: Python version dependencies in pkg
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