Como organizar adequadamente uma árvore de dependência de pacote / módulo?

Bom Dia

Atualmente, estou escrevendo uma biblioteca python. No momento, os módulos e as classes são implantados de maneira desorganizada, sem design fundamentado. Ao abordar um lançamento mais oficial, gostaria de reorganizar classes e módulos para que eles tenham um design geral melhor. Desenhei um diagrama das dependências de importação e planejava agregar classes por nível de camada. Além disso, eu estava considerando algumas modificações nas classes para reduzir essas dependência

Qual é a sua estratégia para um bom design geral de uma biblioteca python potencialmente complexa e em desenvolvimento? Você tem sugestões interessantes?

Obrigad

Atualizar

Eu estava realmente procurando uma regra de ouro. Por exemplo, suponha que esse caso aconteça niss .py removido para maior clareza)

foo/bar/a.py
foo/bar/b.py
foo/hello/c.py
foo/hello/d.py

gora, se você tiver o d.py importando bar.be a.py importando o hello.c, consideraria esta uma configuração ruim. Outro caso seria

foo/bar/a.py
foo/bar/baz/b.py
foo/bar/baz/c.py

suponha que a.py e b.py importem c. você tem três soluções: 1) b importa c, a importa baz.c 2) move c em foo / bar. a.py importa c, b.py importa .c 3) você move c em outro lugar (digamos foo / cpackage / c.py) e depois a e b importam cpackage.c

Eu prefiro 3), mas se o c.py não tiver significado como módulo autônomo, por exemplo, porque você deseja mantê-lo "privado" no pacote bar, eu preferiria 1

Existem muitos outros casos semelhantes. Minha regra geral é reduzir o número de dependências e cruzamentos no mínimo, para evitar uma instalação altamente ramificada e altamente entrelaçada, mas posso estar errado.

questionAnswers(3)

yourAnswerToTheQuestion