I have a hobby project with maybe 20 packages involved. Circular dependencies were getting harder and harder to solve.
What worked in this situation was to separate the whole hairball into two layers. The packages in the app layer could import packages from the utilities layer, but not vice-versa.
This introduced enough structure to simplify the removal of circularities and prevent new outbreaks.