Как правильно организовать проект с простыми зависимостями? - PullRequest
2 голосов
/ 03 ноября 2011

Во время написания кода я часто сталкиваюсь с проблемой решения тривиальных зависимостей. Например, давайте возьмем макет объекта памятки, который я недавно написал. Моя структура каталогов выглядит так:

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru.py
    queue.py
README

Проблема конкретно с mru.py. mru.py содержит класс MRU, который использует очередь, определенную в queue.py. Очевидно, что очередь не является стратегией для мемоизатора, и нет смысла ставить ее под стратегии.

Одна из моих идей заключалась в том, чтобы настроить мой код так:

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru/
      __init__.py
      mru.py
      queue.py
README

Проблема с этой настройкой заключается в том, что теперь пользователь должен знать, что mru находится в подпакете.

Другая идея состояла в том, чтобы расположить структуру следующим образом:

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru.py
    dependencies/
      __init__.py
      queue.py
README

Это решило бы мою проблему, но интуитивно кажется неправильным способом сделать это.

Как правильно организовать мои файлы для учета этого несоответствия?

1 Ответ

3 голосов
/ 03 ноября 2011

Я бы предложил вариант второй структуры:

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru/
      __init__.py <- This is what used to be mru.py
      queue.py
README

Тогда пользователь может просто import memoizer.strategies.mru.

Это быстрый и простой способ сделать это. Тем не менее, вы можете сохранить исходный файл mru.py и выставить элементы из него в свой __init__.py следующим образом:

import mru as _mru

SomeClass = _mru.SomeClass
# etc...
...