# package

Команда загрузки пакетов библиотек и контроля версий.

## СИНТАКСИС

          package forget package

          package ifneeded package version ?script?

          package names

          package provide package ?version?

          package require ?-exact? package ?version?

          package unknown ?command?

          package vcompare version1 version2

          package versions package

          package vsatisfies version1 version2

## ОПИСАНИЕ

Команда поддерживает простую базу данных со сведениями о том, какие пакеты библиотечных функций доступны для использования в данном интерпретаторе, и как их загрузить в интерпретатор. Она поддерживает многоверсионность пакетов и гарантирует загрузку в приложение необходимой версии пакета. При этом она обеспечивает контроль непротиворечивости версий. Обычно в Tcl-скриптах достаточно использовать команды package require и package provide. Остальные команды предназначены в первую очередь для системных скриптов, которые поддерживают базу данных пакетов.

Поведение команды package определяется ее первым аргументом. Ниже описаны возможные формы команды.

package forget package
  Удаляет информацию о пакете из интерпретатора, включая как информацию, возвращаемую командой package ifneeded, так и информацию, возвращаемую командой package provide.
package ifneeded package version ?script?
  Команда используется в системных скриптах. Если указана конкретная версия и скрипт, заносит в базу данных информацию о том, что соответствующая версия пакета доступна и может быть загружена в интерпретатор с помощью скрипта script. Если в базе данных уже хранится информация о скрипте, она обновляется. Если скрипт не указан, возвращается текущий скрипт.
package names
  Возвращает список всех пакетов в интерпретаторе, для которых известна доступная версия (заданная с помощью команды package provide) или скрипт загрузки (заданный командой package ifneeded).
package provide package ?version?
  Команда используется для того, чтобы указать, что версия version пакета package загружена в интерпретатор. Если ранее была загружена другая версия, возвращает ошибку. Если версия не указана, возвращает загруженную версию.
package require ?-exact? package ?version?

  Команда используется, если для выполнения дальнейшего кода необходим библиотечный пакет package версии version. Команда возвращает номер загруженной версии или ошибку. Если присутствуют оба аргумента -exact и version, то команда загружает именно указанную версию (или выдает ошибку, если эта версия недоступна). Если присутствует номер версии, а -exact опущено, то команда загружает указанную версию или более позднюю, но с тем же старшим номером версии (2.7, но не 3.1, когда указана версия 2.5).

  Если база данных не содержит необходимой версии, а в интерпретаторе определена команда для packageunknown (см. ниже), то она исполняется, после чего повторно проверяется доступность необходимой версии. Если версия по-прежнему недоступна, команда возвращает ошибку.

package unknown ?command?

  Команда последней надежды при поиске необходимой версии пакета. Если аргумент command указан, то он дополняется именем пакета и версии и полученный скрипт выполняется. Если версия не указана, подставляется пустая строка.

  Если аргумент command не указан, возвращает текущий скрипт, заданный для команды package unknown.

package vcompare version1 version2
  Команда сравнения версий. Возвращает -1, если version1 более ранняя версия, чем version2, 1 - в противном случае, и 0, если они равны.
package versions package
  Возвращает список всех доступных версий пакета (информация о которых занесена в базу данных с помощью команды package ifneeded).
package vsatisfies version1 version2
  возвращает 1, если у version1 и version2 совпадают старшие номера, а младший номер у version1 не меньше, чем у version2, и 0 - в противном случае.

## ИНДЕКСЫ ПАКЕТОВ

Рекомендованный способ работы с пакетами в Tcl состоит в том, чтобы включать в скрипты команды package require и package provide и использовать процедуру pkg_mkIndex (см. соответствующие пункты) для создания индексных файлов для пакетов. Это обеспечивает автоматическую загрузку необходимых пакетов.

См.также close(n), filename(n), gets(n), read(n), puts(n), exec(n).