жете получить доступ к этому списку и изменить его. Вот так выглядит значение
переменной sys.path в Python 3.3 в моей версии операционной системы Mac:
>>> import sys
>>> for place in sys.path:
... print(place)
...
/Library/Frameworks/Python.framework/Versions/3.3/lib/python33.zip
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/plat-darwin
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/lib-dynload
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages
Пустое место в начале вывода содержит в себе строку '', которая символизиру-
ет текущий каталог. Если строка '' находится первой в sys.path, Python сначала
выполнит поиск в текущем каталоге, когда вы попробуете что-то импортировать:
import report выглядит как report.py.
Будет использован первый найденный модуль. Это означает, что, если вы опре-
делите модуль с именем random и он будет найден раньше оригинального модуля,
вы не получите доступ к стандартной библиотеке random.
Пакеты
Мы перешли от отдельных строк кода к функциям, отдельным программам и мо-
дулям, располагающимся в одной папке. Чтобы сделать еще один шаг, вы можете
организовать модули в иерархии файлов, которые называются пакетами.
Возможно, нам нужны разные типы прогнозов погоды: на следующий день
и следующую неделю. В качестве одного из вариантов мы можем создать папку
с именем sources, а внутри нее — два модуля: daily.py и weekly.py. Каждый из них
содержит функцию forecast. Версия на каждый день возвращает строку, а версия
на каждую неделю — список из семи строк.
Рассмотрим основную программу и два модуля. (Функция enumerate() разбива-
ет список на части и отправляет каждый элемент списка в цикл for, добавляя
к каждому элементу число в качестве небольшого бонуса.)
Стандартная библиотека Python
147
Основная программа — boxes/weather.py:
from sources import daily, weekly
print("Daily forecast:", daily.forecast())
print("Weekly forecast:")
for number, outlook in enumerate(weekly.forecast(), 1):
print(number, outlook)
Модуль 1: boxes/sources/daily.py.
def forecast():
'fake daily forecast'
return 'like yesterday'
Модуль 2: boxes/sources/weekly.py.
def forecast():
"""Fake weekly forecast"""
return ['snow', 'more snow', 'sleet',
'freezing rain', 'rain', 'fog', 'hail']
В папке sources вам понадобится иметь кое-что еще — файл с именем __init__.py.
Он может быть пустым, но Python он нужен для того, чтобы считать папку, которая