7 ноября 2013 г.

Продолжаем про импорт

Первое из разъяснений про импорт:
Это будет...

Поиск Пути Модулей

Как известно программистам, или же начинающим программистам, что важным этапом является поиск импортируемого модуля. Но для того чтоб этот поиск сработал, вам необходимо будет указать интерпретатору, где его искать. Для того, чтоб это сделать, вам необходимо знать, как это сделать. Именно для этого и создаю этот пост.
В большинстве случаев можно положиться на автоматически организованные пути поиска. Однако если вам придется импортировать модули из пользовательских каталогов, вам необходимо будет знать как работает путь поиска файлов, чтобы его настроить. В общем, пути поиска модулей в языке Python выбираются из объединенных данных следующих основных источников. Некоторые из них предопределены, а некоторые можно настроить и тем самым 
сообщить интерпретатору, где выполнять поиск:
1.  Домашний каталог программы.
2.  Содержимое переменной окружения PYTHONPATH (если таковая определена). 
3.  Каталоги стандартной библиотеки. 
4.  Содержимое любых файлов с расширением .pht (если таковые имеются). 
В конечном итоге объединение этих четырех компонентов составляет sys.path список строк с именами каталогов, о котором я расскажу подробнее в следующем посте. Первый и третий компоненты пути поиска определяются автоматически, но так как интерпретатор при поиске использует данные всех этих компонентов,  от  первого  до  последнего,  то  второй  и  четвертый  компоненты можно использовать для расширения пути поиска, включая в него свои собственные каталоги с исходными текстами.

Как интерпретатор Python использует эти компоненты пути:
Домашний каталог
В первую очередь интерпретатор ищет импортируемые файлы в домашнем каталоге. В зависимости от того, как была запущена программа, это может быть каталог, где находится главный файл программы. При работе в интерактивном сеансе этот элемент содержит путь к каталогу, откуда была запущена интерактивная оболочка (то есть текущий рабочий каталог).

Поскольку поиск в первую очередь всегда производится в этом каталоге, если  программа целиком  располагается  в  одном  каталоге,  все  операции импорта будут выполнены автоматически, без необходимости настраивать путь поиска. С другой стороны, из-за того, что поиск в первую очередь производится в этом каталоге, файлы, находящиеся в нем, могут сделать недоступными модули с теми же именами, находящиеся в других каталогах, 
– будьте внимательны, чтобы случайно не сделать недоступными библиотечные модули, которые могут потребоваться вашей программе.

Каталоги в PYTHONPATH
После этого поиск производится во всех каталогах, перечисленных в переменной окружения PYTHONPATH, слева направо (если эта переменная вообще установлена). В двух словах, переменная окружения PYTHONPATH – это просто список имен каталогов, определяемых пользователем и системой, в которых располагаются файлы с программным кодом на языке Python. Вы можете  добавить  в  эту  переменную  все  каталоги,  откуда  предполагается 
импортировать модули, и интерпретатор будет использовать ваши настройки при создании пути поиска модулей.

Поскольку интерпретатор пытается отыскать файлы сначала в домашнем каталоге, настройка этой переменной приобретает большое значение, только когда необходимо импортировать модули, размещающиеся в разных каталогах, – то есть, когда импортируемый файл хранится в каталоге, отличном от каталога, где располагается импортирующий файл. Вам наверняка 
потребуется настраивать переменную окружения PYTHONPATH, как только вы начнете писать большие программы, но на начальном этапе освоения языка храните файлы всех своих модулей в каталоге, в котором вы работаете (то есть в домашнем каталоге), и тогда операции импорта будут работать без необходимости выполнять какие-либо настройки.

Каталоги стандартной библиотеки
Далее  интерпретатор  автоматически  выполняет  поиск  в  каталогах,  куда были установлены модули стандартной библиотеки. Так как эти каталоги всегда участвуют в поиске, их можно не добавлять в переменную окружения PYTHONPATH, или включать в файлы с расширением .pth, о которых рассказывается ниже.

Каталоги в файле .pth
Наконец,  относительно  новая  особенность  языка  Python  дает  пользователям  возможность  добавлять  нужные  каталоги  в  путь  поиска  модулей, просто перечисляя их по одному в строке в текстовом файле, имя которого оканчивается расширением .pth (от слова «path» – «путь»). Эти файлы представляют собой расширенную возможность, имеющую отношение к проблеме установки, и мы не будем здесь подробно их обсуждать. Впрочем, они могут служить альтернативой настройки переменной PYTHONPATH. Текстовый файл со списком каталогов помещается в соответствующий каталог и может играть примерно ту же роль, что и переменная окружения PYTHONPATH. Например, если вы работаете в Python 3.0 под Windows, файл с именем myconfig.pth можно поместить в главный каталог, куда был установлен Python 3.0 (например, C:\Python30), или в подкаталог site-packages C:\Python30\Lib\site-packages  стандартной  библиотеки,  что  позволит  расширить путь поиска модулей. В UNIX-подобных системах этот файл можно 
поместить в каталог /usr/local/lib/python3.0/site-packages или /usr/local/lib/site-python.
Обнаружив этот файл, интерпретатор добавит в конец пути поиска модулей каталоги, перечисленные во всех строках файла, от первой до последней. Интерпретатор выберет все имена каталогов во всех файлах .pth, которые обнаружит,  и  отфильтрует  повторяющиеся  имена  и  имена  несуществующих каталогов. Поскольку это файлы, а не параметры настройки командной оболочки, они могут применяться ко всем пользователям системы, а не только к одному пользователю или одной командной оболочке. Кроме того, для некоторых пользователей процедура создания текстовых файлов выглядит проще, чем настройка переменных окружения. Эта  особенность  на  практике  более  сложная,  чем  я  описал.  За  дополнительной  информацией  обращайтесь  к  руководству  по  библиотеке  языка Python,  в  частности  к  описанию  модуля  site,  входящего  в  стандартную библиотеку, – этот модуль позволяет создавать файлы .pth и определять местоположение библиотек языка Python, а в документации к нему описываются каталоги, где вообще могут располагаться файлы .pth. Начинающим я рекомендую использовать переменную окружения PYTHONPATH или единственный файл .pth и только в том случае, если возникает необходимость импортировать  файлы  из  других  каталогов.  Наиболее  часто  файлы  .pth используются в сторонних библиотеках, которые обычно устанавливают файлы .pth в каталог site-packages, чтобы исключить необходимость дополнительных настроек (система установки пакетов distutils, описываемая во врезке ниже, позволяет автоматизировать многие операции, выполняемые при установке). 

Было слишком много текста из исходника, пришлось скопипастить, в след посте будет практика, там будет меньше копипаста. 

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

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