Я пишу семейство скриптов Python в рамках проекта; каждый script находится в подкаталоге проекта, например:
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
Теперь некоторые из скриптов имеют общий код. Общий код лучше всего рассматривать как часть самого проекта, а не то, что я собирал бы отдельно, и выкладывал бы библиотеку, или удалял бы PYTHONPATH. Я мог бы разместить этот код в разных местах, например, в самом каталоге projectroot
или в дочернем каталоге projectroot
, который называется common
(возможно).
Однако большинство способов, о которых я думал до сих пор, включают в себя создание пакетов из моих подпроектов с пустыми __init__.py
файлами и использование относительного импорта (или избыточное возиться с sys.path
в каждом подпроекте. Хуже, похоже, структура пакета вокруг этого семейства скриптов запускается из следующего предупреждения от отклоненного PEP-32122:
Внимание! Этот PEP был отклонен. Guido просматривает сценарии в пакете как анти-шаблон.
Если скрипты внутри пакета являются анти-патчавыми, как я могу настроить вещи таким образом, чтобы сохранить общий код в одном проекте? Или это приемлемый здесь модуль и пакетная система? Какой самый чистый подход? (FWIW Я предпочел бы иметь файл, такой как shared.py
или common.py
в корневом каталоге проекта, вместо того, чтобы сделать каталог утилиты, который является родным для "реальных" подпроектов.)