Python: общий код для семейства скриптов
m написание семейства скриптов Python внутри проекта; каждый скрипт находится в подкаталоге проекта, например так:
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-3122:
Внимание! Этот ПКП был отклонен. Гвидо рассматривает выполнение скриптов в пакете как анти-шаблон.
Если сценарии в пакете не являются шаблонными, как я могу настроить их так, чтобы общий код оставался в одном проекте? Или здесь приемлема модульная и пакетная система? Какой самый чистый подход? (FWIW Я бы предпочел иметь такой файл, какshared.py
или жеcommon.py
в корневом каталоге проекта, вместо создания каталога утилит, который является родным для "реальный» подпроекты.)