Вы можете иметь несколько каталогов (то есть каталогов common/project
, frontend/project
и backend/project
) в вашем PYTHONPATH
с перекрывающимися иерархиями (т.е. каждый имеет project
пакет верхнего уровня), но по умолчанию Python не будет будьте довольны этим, потому что он использует каталог first , который находит, и не ищет все из них, как это делают многие другие языки (PHP, Java и т. д.), поэтому вы получите ошибки импорта.
Однако, поместив это в каждый project/
каталог __init__.py
, вы фактически указываете Python продолжать искать, и это не единственное место, где можно найти код для этого пакета:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
Многие питонисты будут избегать и издеваться над вами за такую нелепую аберрацию и заявлять о глупости этого усилия и, возможно, делать неприятные предположения о вашем происхождении приматов. «Пакеты пространств имен - ужасная идея», - скажут они. Приготовьтесь защищать свое решение. И не смей добавлять эти две строки в дерево исходных текстов без сопровождающих комментариев, объясняющих, что они делают!
На этой странице есть хорошее объяснение некоторых из этих понятий:
Объяснение: http://www.doughellmann.com/PyMOTW/pkgutil/
Если вы придерживаетесь этого подхода, вы можете создать дистрибутив с помощью common
+ frontend
, а другой с common
+ backend
.