Основные тезисы
1. В то время как модуль предназначен для объединения некоторых связанных сущностей, таких как функции, переменные или константы, пакет представляет собой контейнер, который позволяет объединить несколько связанных модулей под одним общим именем. Такой контейнер можно распространять как есть (как пакет файлов, развернутых в поддереве каталогов), или он может быть упакован в zip-файл.
2. Во время самого первого импорта фактического модуля Python переводит свой исходный код в полукомпилированный формат, хранящийся внутри файлов pyc, и развертывает эти файлы в каталог __pycache__
, расположенный в домашнем каталоге модуля.
3. Если Вы хотите сообщить пользователю Вашего модуля, что конкретный объект должен рассматриваться как приватный (т.е. не использоваться явно за пределами модуля), Вы можете пометить его имя с помощью _
или префикс __
. Не забывайте, что это всего лишь рекомендация, а не приказ...
4. Имена shabang, shebang, hasbang, poundbang и hashpling означают диграф, записываемый как #!
, он используется для указания Unix-подобным ОС, как запускать исходный файл Python. Эта конвенция не действует в MS Windows.
5. Если Вы хотите убедить Python, что он должен учитывать нестандартный каталог пакета, его имя необходимо добавить в список каталогов импорта, хранящийся в переменной path
, содержащейся в модуле sys
.
6. Файл Python с именем __init__.py
неявно запускается, когда пакет, содержащий его, подлежит импорту, и используется для инициализации пакета и/или его подпакетов (если есть). Файл может быть пустым, но не должен отсутствовать.
Упражнение 1
Вы хотите запретить пользователю вашего модуля запускать ваш код как обычный скрипт. Как добиться такого эффекта?
Упражнение 2
Некоторые дополнительные и необходимые пакеты хранятся в каталоге D:\Python\Project\Modules
. Напишите код, обеспечивающий просмотр каталога Python для поиска всех запрошенных модулей.
Упражнение 3
Каталог, упомянутый в предыдущем упражнении, содержит поддерево следующей структуры:
abc
|__ def
|__ mymodule.py
Предполагая, что D:\Python\Project\Modules
был успешно добавлен в список sys.path
, напишите директиву импорта, позволяющую использовать все сущности из mymodule
.