Как организовать мои модули и пакеты Python - PullRequest
0 голосов
/ 18 февраля 2019

Итак, я написал модуль A и специальный тест-файл.Этот модуль можно использовать отдельно, но я написал его для использования в качестве «основы» для второго написанного мной модуля.Этот второй модуль абсолютно нуждается в первом, а также имеет собственный тест-файл.Наконец, я написал третий модуль, основанный на первых двух модулях.Другими словами:

  • модуль A, может использоваться без B или C.
  • модуль B нуждается в модуле A, и может использоваться без C
  • модуль Cнужен модуль B (и так же A)

Мой вопрос: как обращаться со всеми этими модулями?Например, должен ли я сделать каждый модуль пакетом, а затем импортировать A в B и B в C?Или я должен положить их все в одну упаковку?Кроме того, что мне делать со всеми тестовыми файлами (поместить их рядом с модулем или все в одну тестовую папку)?

На сегодняшний день я рассматриваю каждый из них как пакет, но этокажется немного тяжелым, чтобы установить A и B для использования C:

+ moduleA
    - moduleA.py
    - test_moduleA.py
+ moduleB
    - moduleB.py
    - test_moduleB.py
+ moduleC
    - moduleC.py
    - test_moduleC.py

Так что я думал о слиянии всего этого так:

+ moduleC
    - moduleA.py
    - moduleB.py
    - moduleC.py
    + tests
        - test_moduleA.py
        - test_moduleB.py
        - test_moduleC.py

Это ли питонский способ обернутьмой модуль C (и все его компоненты)?Или я должен вложить модули в подпакеты (moduleC.moduleB.moduleA)?

Цель всего этого - экспортировать на github-подобную платформу и, в конечном итоге, получить pip.

1 Ответ

0 голосов
/ 18 февраля 2019

Модули кажутся независимыми, поэтому их следует разрабатывать отдельно: отдельные каталоги разработки, отдельные репозитории git.

Для правильной установки модули должны объявлять зависимости: B зависит от A, а C напрямую зависит от B икосвенно (транзитивно через B) зависит от A. Такие зависимости должны быть объявлены в setup.py:

В B:

setup(
    …
    install_requires=[A]
    …
)

В C:

setup(
    …
    install_requires=[B]
    …
)

Нет необходимости объявлять зависимость от A как B, когда при установке устанавливается A.

Таким образом, при установке pip install A A будет установлен один;при установке pip install B B будет установлен с A;при установке pip install C C будет устанавливаться как с A, так и с B.

...