Ответ 1
A модуль - это набор функций, типов, классов,... объединенных в общем пространстве имен.
A library - это набор модулей, который имеет смысл быть вместе и может использоваться в программе или другой библиотеке.
A package - это единица распространения, которая может содержать библиотеку или исполняемый файл или и то, и другое. Это способ поделиться своим кодом с сообществом.
Обратите внимание, что библиотека не должна быть изолирована в пакете. То есть, вполне приемлемо иметь библиотеку в вашем проекте, которая используется внутри этого проекта. Поэтому код ясен от остальных для ясности и ремонтопригодности. Это также хороший способ изолировать некоторые общие цели от вашего кода бизнес-логики, и эта библиотека в конечном итоге может быть извлечена и передана между проектами или сообществом, если это необходимо.