3

If I am working on a project, say it has this file structure:

car/
   body/
      __init__.py
      doors.py
      bonnet.py
   engine/
      cyclinderhead/
          __init__.py
          pistons.py
      __init__.py
      crankshaft.py
      engconstants.py
    utilities.py    

Now invariabley the pistons.py file will need some sort of constant (engconstants.py) or utility function (utilities.py). The pistons.py is a very nested deep file. Is it okay that it depends on files higher up in the file structure? I got the impression that the less nested files should only depend on the more nested files, and depencies going the other way are a code smell? I often get myself into circular import predicaments and am trying to implement a set of rules/guidelines to prevent that.

1 Answers1

0

No it's all right when subpackages depend on higher modules or packages depend on subpackages. The circular import problem not related to that. It can appear even if files have the same nesting level.

Try to make each module the most independent to not encounter circular import. But sometimes independence can lead to violating DRY and Single Source of Truth.

If, after all, you encounter circular import, the fastest and sometimes the best solution is merging dependencies into one module.