10 ноября 2013 г.

Выбор файла модуля

Как говорится - от теории к практике...

Выбор Файла Модуля
Расширения .py преднамеренно опущены в инструкции import. Интерпретатор Python выбирает первый найденный в пути поиска файл который соответствует указанному имени. В таком случае инструкция import b могла бы загрузить:

- Файл с исходным кодом, имя b.py.
- Файл с байт-кодом, имя b.pyc.
- Содержание каталога b при импортировании пакета.
- Скомпилированный модуль расширения, например b.so, b.dll, b.pyd.
- Скомпилированный встроенный модуль, на языке С и статически скомпонованныный с интерпретатором Python.
- Архив zip, с компонентами которые извлекаются при импорте.
- Образ памяти для фиксированных двоичных исполняемых файлов.
- Класс Java в версии Jython.
- Компонент .NET в версии IronPython.

Импортирование  расширений,  написанных  на  языке  C,  операция  импорта 
в Jython и импортирование пакетов – это расширенные возможности импортирования компонентов, не являющихся простыми файлами модулей. Впрочем, для импортера различия в типах загружаемых файлов совершенно незаметны как при импорте, так и при обращении к атрибутам модуля. Инструкция import b загружает некоторый модуль b в соответствии с настройками пути поиска модулей, а инструкция b.attr извлекает элемент модуля, будь то переменная или функция, написанная на языке C. Некоторые стандартные модули, 
которые мы будем использовать в этой книге, в действительности написаны на 
языке C, но благодаря прозрачности импортирования, это не имеет никакого 
значения для клиентов.

Если у вас в различных каталогах имеются файлы b.py и b.so, интерпретатор 
всегда будет загружать тот, что будет найден в каталоге, который располагается раньше (левее) в пути поиска модулей, так как поиск в списке sys.path выполняется слева направо. Но что произойдет, если оба файла, b.py и b.so, находятся в одном и том же каталоге? В этом случае интерпретатор будет следовать стандартному порядку выбора файлов, впрочем, нет никаких гарантий, что такой порядок будет оставаться неизменным с течением времени. Вообще вы должны избегать зависимости от порядка выбора файлов интерпретатором Python в одном и том же каталоге – давайте своим модулям различные имена или настраивайте путь поиска модулей, чтобы обеспечить более очевидный порядок выбора файлов.

Комментариев нет:

Отправить комментарий