Solved Correct way of handling python flavors in port dependencies?

I'm struggling to understand what the "correct" way for handling python flavors is.

I'm attempting to port some software that depends on py-qt5; on amd64, there's a binary packages for py37-qt5 only at the moment. So, I figured I'll make my port USE=python:3.7.

However, I hit a snag when I added dependencies to py-sutil the following way:

When I attempted a make package, this leads to
===>   xxx depends on executable: fvwm2 - found
===>   xxx depends on executable: pyuic5 - found
===>   xxx depends on package: py37-yaml>=3.11 - found
===>   xxx depends on package: py37-psutil>0 - not found
===>  py37-psutil-5.8.0 Unknown flavor 'py37', possible flavors: py38.
*** Error code 1

make[2]: stopped in /usr/ports/sysutils/py-psutil

I gather, psutil is set to not support python 3.7, even though there is a binary package py37-psutil? What surprises me in particular, is the fact that psutil actually sets
USES=           python:3.6+
I read: it should support building flavor py37?

Right now, I see following options and I'm unsure how best to proceed:
  1. File a bug report with py-psutil port and ask to add FLAVORS=py37 (which seems to do the trick, as testing shows)
  2. be a complete PITA and argue that the ports system isn't working? (just kidding...)
  3. Change my port to not depend distinctly on python:3.7 and just live with having to compile py-qt5 for python 3.8 myself instead of using a binary package
  4. go into a cave and reflect on my life choices of porting software in the first place (still kidding...)
While option 3 obviously is the "easier" way forward, I wonder what one would do, if your port really does need a particular python version? I've searched for other ports that face this challenge but ended up none the wiser.

Or am I misinterpreting the inner workings of the ports system? After all, I can just as well pkg install py37-psutil and keep going back to make package. Having resolved the dependency, my port packaging appears to finish fine afterwards.


Staff member

So, I figured I'll make my port USE=python:3.7.
The default is currently set to 3.8. It changed recently. Best is not to "fix" on a specific version at all and let it pick whatever is set as default. Unless you know for a fact the code is only supported on a specific version.


I currently use USES= python:3.7+ because I'm way too lazy to test whether older python versions would be fine as well ;) With the +, a newer version is ok.