Пришло время... и мне понадобилось подключить свой модуль. Чужие модули я загружал и импортировал. Все это проходило легко. А вот куда и как грузить свои? В книге М.Лутца на эту тему около сотни страниц. Конспектировать смысла не вижу. Постараюсь записат здесь только то, что мне понадобилось.
Импортирование в языке Python – это не просто включение текста одного файла в другой. Это самые настоящие операции времени выполнения, которые выполняют следующие действия, когда программа впервые импортирует заданный файл:
1. Отыскивают файл модуля.
2. Компилируют в байт-код (если это необходимо).
3. Запускают программный код модуля, чтобы создать объекты, которые он определяет.
Сам процесс импорта осуществляется последовательно. Каждый раз загружается первый файл, который находится в путях поиска. Поэтому последовательность обхода путей поиска может оказаться важной (в случае кнфликта имен..., как его избежать?)
1. Отыскать файлы модулей можно по установленым путям¶
Out[2]:
['',
'C:\\Users\\kiss\\Anaconda\\python27.zip',
'C:\\Users\\kiss\\Anaconda\\DLLs',
'C:\\Users\\kiss\\Anaconda\\lib',
'C:\\Users\\kiss\\Anaconda\\lib\\plat-win',
'C:\\Users\\kiss\\Anaconda\\lib\\lib-tk',
'C:\\Users\\kiss\\Anaconda',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\PIL',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32\\lib',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\Pythonwin',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info',
'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\IPython\\extensions']
В общих чертах пути поиска модулей в языке Python выбираются из объединенных данных следующих основных источников. Некоторые из них предопределены, а некоторые можно настроить и тем самым сообщить интерпретатору, где выполнять поиск:
1. Домашний каталог программы.
2. Содержимое переменной окружения PYTHONPATH (если таковая определена).
3. Каталоги стандартной библиотеки.
4. Содержимое любых файлов с расширением .pht (если таковые имеются)
В первую очередь интерпретатор ищет импортируемые файлы в домашнем каталоге. В зависимости от того, как была запущена программа, это может быть каталог, где находится главный файл программы. При работе в интерактивном сеансе этот элемент содержит путь к каталогу, откуда была запущена интерактивная оболочка (то есть текущий рабочий каталог).
Поскольку поиск в первую очередь всегда производится в этом каталоге, если программа целиком располагается в одном каталоге, все операции импорта будут выполнены автоматически, без необходимости настраивать путь поиска.
С другой стороны, из-за того, что поиск в первую очередь производится в этом каталоге, файлы, находящиеся в нем, могут сделать недоступными модули с теми же именами, находящиеся в других каталогах, будьте внимательны, чтобы случайно не сделать недоступными библиотечные модули, которые могут потребоваться вашей программе.
После этого поиск производится во всех каталогах, перечисленных в переменной окружения PYTHONPATH, слева направо (если эта переменная вообще установлена).
В двух словах, переменная окружения PYTHONPATH – это просто список имен каталогов, определяемых пользователем и системой, в которых располагаются файлы с программным кодом на языке Python.
Вы можете добавить в эту переменную все каталоги, откуда предполагается импортировать модули, и интерпретатор будет использовать ваши настройки при создании пути поиска модулей.
Поскольку интерпретатор пытается отыскать файлы сначала в домашнем каталоге, настройка этой переменной приобретает большое значение, только когда необходимо импортировать модули, размещающиеся в разных каталогах, – то есть, когда импортируемый файл хранится в каталоге, отличном от каталога, где располагается импортирующий файл.
Вам наверняка потребуется настраивать переменную окружения PYTHONPATH, как только вы начнете писать большие программы, но на начальном этапе освоения языка храните файлы всех своих модулей в каталоге, в котором вы работаете (то есть в домашнем каталоге), и тогда операции импорта будут работать без необходимости выполнять какие-либо настройки.
На моем ноутбуке это путь не прописан, есть только:
Компьютер -> Свойства -> Дополнительные параметры системы -> Переменные среды ->PYTHON -> C:\Users\kiss\Anaconda\python.exe
Каталоги стандартной библиотеки¶
Далее интерпретатор автоматически выполняет поиск в каталогах, куда были установлены модули стандартной библиотеки. Так как эти каталоги всегда участвуют в поиске, их можно не добавлять в переменную окружения PYTHONPATH, или включать в файлы с расширением .pth, о которых рассказывается ниже.
На моем ноутбуке есть еще в переменной PATH ... ...;C:\Users\kiss\Anaconda\Scripts;... (желтый макрер на картинке)
Можно создать переменную PYTHONPATH ... (при необходимости)
Наконец, относительно новая особенность языка Python дает пользователям возможность добавлять нужные каталоги в путь поиска модулей, просто перечисляя их по одному в строке в текстовом файле, имя которого оканчивается расширением .pth (от слова «path» – «путь»).
Например, если вы работаете в 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, которые обнаружит, и отфильтрует повторяющиеся имена и имена несуществующих каталогов.
Cоздать текстовый файл с именем C:\Python30\pydirs.pth, который выглядит примерно так:
c:\pycode\utilities
d:\pycode\package1
Имейте в виду, что расширения имен файлов (например, .py) преднамеренно опущены в инструкции import. Интерпретатор выбирает первый найденный в пути поиска файл, который соответствует указанному имени. Например, инструкция import b могла бы загрузить:
• Файл с исходным текстом, имеющий имя b.py.
• Файл с байт-кодом, имеющий имя b.pyc.
• Содержимое каталога b при импортировании пакета (описывается в главе 23).
• Скомпилированный модуль расширения, написанный, как правило, на языке C или C++ и скомпонованный в виде динамической библиотеки (например, b.so в Linux и b.dll или b.pyd в Cygwin и в Windows).
• Скомпилированный встроенный модуль, написанный на языке C и статически скомпонованный с интерпретатором Python.
• Файл ZIP-архива с компонентом, который автоматически извлекается при импорте.
• Образ памяти для фиксированных двоичных исполняемых файлов.
• Класс Java в версии Jython.
• Компонент .NET в версии IronPython.
Комментариев нет:
Отправить комментарий