I've read the other threads on this but they haven't really helped me.
I have to 2 .py files, both located under ets.routes, called agreements.py and approvals.py. 
The file agreements.py imports several methods from approvals:
from ets.routes.approvals import getPendingApprovals, getIsApprover It itself also exposes a utility method which should be available to approvals called authorize_agreement.
Now in approvals.py if I do
from ets.routes.agreements import authorize_agreement I get the error
ImportError: cannot import name 'getPendingApprovals' from partially initialized module 'ets.routes.approvals' (most likely due to a circular import) (C:\gitForVS\app\api\ets\routes\approvals.py) I can't move authorize_agreement to some external file like utils.py, it really should be in agreements.py because it uses a lot of DB and associated Agreement-level code which is available there. It's just that this function should be imported by its sibling, while it itself imports some of the sibling's functions. Why is that such an issue? Are you required to have 1-way imports (e.g. from approvals -> agreements only) in Python?
authorize_agreementinside a specific function in theapprovals.pymodule, put the import line inside that function. The import will then not be executed when the package or module is imported, but only by the time the function is executed, avoiding the circular import.