Установка пакета Python 2.7 с несколькими модулями и упакованными пространствами имен - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу сохранить несколько модулей Python в одном репо, чтобы им было легче управлять и работать с ними одновременно.

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

Вот структура, которая у меня есть:

repo/
  modules/
    foo_a/
      setup.py
      VERSION
      foo/
        __init__.py
        a/
    foo_b/
      setup.py
      VERSION
      foo/
        __init__.py
        b/

Файлы VERSION являются отдельными и отслеживают разные версии.И __init__.py файлы выше особый тип, описанный здесь .

В настоящее время я автоматически собираю соответствующий модуль, когда в нем изменяется файл VERSION.


Я хочу иметь возможность установить весь пакет со всеми пакетами пространства имен из корня репозитория.Так что я могу просто сделать pip install ..Либо это установит все как один пакет (foo_all), либо установит каждый модуль по отдельности.

Смысл использования этого заключается в том, что большинство людей используют все модули и им нужно что-то простое в установке, но иногда я простохотите иметь возможность установить один из модулей.

Главное, что вы можете запустить:

pip install repo

, и тогда эти команды Python завершатся успешно.

from foo import a
from foo import b

Есть идеи, как это сделать?

Я видел функцию setuptools.find_namespace_packages(), но похоже, что это только Python3, и я не совсем уверен, что это то, что мне нужно в любом случае.Я не могу перейти на Python3, потому что он для клиента и зависит от API Python2, что невероятно расстраивает.

Также замечен параметр package_dir для setuptools.setup(), но это для всех пакетовпросто в другой папке.Я не могу поместить весь пакет в другую папку, потому что отдельные файлы будут перекрываться (setup.py, VERSION, foo/)

1 Ответ

1 голос
/ 20 сентября 2019

Возможно распространять foo.a и foo.b как независимые проекты вместе с пустым foo проектом, в котором два других имеют значение install_requires.

Вся установка описана в Python Packaging.Руководство пользователя "Упаковка пакетов пространства имен" .

...