Spec-Zone.ru › Tcl/Tk

package

NAME
package — Средства для загрузки пакетов и управления версиями
SYNOPSIS
DESCRIPTION
package forget ?package package ...?
package ifneeded package version ?script?
package names
package present ?-exact? package ?requirement...?
package provide package ?version?
package require package ?requirement...?
package require -exact package version
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version requirement...
min
min-
min-max
package prefer ?latest|stable?
НОМЕРЫ ВЕРСИЙ
ИНДЕКСЫ ПАКЕТОВ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

package — Средства для загрузки пакетов и управления версиями

Синтаксис

package forget ?package package ...?
package ifneeded package version ?script?
package names
package present package ?requirement...?
package present -exact package version
package provide package ?version?
package require package ?requirement...?
package require -exact package version
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version requirement...
package prefer ?latest|stable?

Описание

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

Поведение команды package определяется ее первым аргументом. Допускаются следующие формы:

пакет забыть ?пакет пакет ...?
Удаляет всю информацию о каждом указанном пакете из этого интерпретатора, включая информацию, предоставленную как пакет если_нужно, так и пакет предоставить.
пакет если_нужно пакет версия ?скрипт?
Эта команда обычно встречается только в скриптах конфигурации системы для настройки базы данных пакетов. Она указывает, что определенная версия определенного пакета доступна при необходимости, и что пакет может быть добавлен в интерпретатор путем выполнения скрипта. Скрипт сохраняется в базе данных для использования последующими командами пакет потребовать; обычно, скрипт настраивает автоматическую загрузку команд пакета (или непосредственно вызывает загрузить и/или источник), затем вызывает пакет предоставить, чтобы указать, что пакет присутствует. В базе данных может быть информация для нескольких различных версий одного пакета. Если база данных уже содержит информацию для пакета и версии, новый скрипт заменяет существующий. Если аргумент скрипт опущен, возвращается текущий скрипт для версии версия пакета пакет, или пустая строка, если команда пакет если_нужно не была вызвана для этого пакета и версии.
пакет имена
Возвращает список имен всех пакетов в интерпретаторе, для которых была предоставлена версия (через пакет предоставить) или для которых доступен скрипт пакет если_нужно. Порядок элементов в списке произвольный.
пакет присутствует ?-точно? пакет ?требование...?
Эта команда эквивалентна пакет потребовать, за исключением того, что она не пытается загрузить пакет, если он уже не загружен.
пакет предоставить пакет ?версия?
Эта команда вызывается для указания того, что версия версия пакета пакет теперь присутствует в интерпретаторе. Обычно она вызывается один раз в рамках скрипта если_нужно и снова самим пакетом, когда он наконец загружается. Возникает ошибка, если другая версия пакета была предоставлена предыдущей командой пакет предоставить. Если аргумент версия опущен, то команда возвращает номер версии, который в настоящее время предоставлен, или пустую строку, если команда пакет предоставить не была вызвана для пакета в этом интерпретаторе.
пакет потребовать пакет ?требование...?
Эта команда обычно вызывается кодом Tcl, который хочет использовать определенную версию определенного пакета. Аргументы указывают, какой пакет нужен, и команда гарантирует, что подходящая версия пакета загружается в интерпретатор. Если команда выполняется успешно, она возвращает номер версии, который загружен; в противном случае она генерирует ошибку.

Подходящая версия пакета — любая версия, которая удовлетворяет хотя бы одному из требований в соответствии с правилами пакет удовлетворяет. Если подходящих версий несколько, выбирается реализация с самой высокой версией. Последний момент дополнительно зависит от режима выбора, установленного с помощью пакет предпочитать.

В режиме выбора «стабильно» команда выберет самую высокую стабильную версию, удовлетворяющую требованиям, если таковая имеется. Если ни одна стабильная версия не удовлетворяет требованиям, будет выбрана самая последняя нестабильная версия, удовлетворяющая требованиям. В режиме выбора «последняя» команда примет самую последнюю версию, удовлетворяющую всем требованиям, независимо от ее стабильности.

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

пакет потребовать -точно пакет версия
Этот вид команды используется, когда только указанная версия пакета приемлема для вызывающей стороны. Эта команда эквивалентна пакет потребовать пакет версия-версия.
пакет неизвестный ?команда?
Эта команда предоставляет команду «последней надежды» для вызова при пакет потребовать, если подходящая версия пакета не найдена в базе данных пакет если_нужно. Если аргумент команда указан, он содержит первую часть команды; когда команда вызывается во время команды пакет потребовать, Tcl добавляет один или несколько дополнительных аргументов, задавая желаемое имя пакета и требования. Например, если команда — foo bar, а затем вызывается команда пакет потребовать test 2.4, то Tcl выполнит команду foo bar test 2.4 для загрузки пакета. Если требования не указаны в команде пакет потребовать, то в вызываемую команду будет добавлен только сам пакет. Если команда пакет неизвестный вызывается без аргумента команда, то возвращается текущий скрипт пакет неизвестный или пустая строка, если его нет. Если команда указана как пустая строка, то текущий скрипт пакет неизвестный удаляется, если он есть.
пакет vсравнить версия1 версия2
Сравнивает два номера версий, заданные версия1 и версия2. Возвращает -1, если версия1 — более ранняя версия, чем версия2, 0, если они равны, и 1, если версия1 — более поздняя версия, чем версия2.
пакет версии пакет
Возвращает список всех номеров версий пакета, для которых информация была предоставлена командами пакет если_нужно.
пакет удовлетворяет версия требование...
Возвращает 1, если версия удовлетворяет хотя бы одному из заданных требований, и 0 в противном случае. Каждое требование может иметь любой из следующих форматов:
мин
Этот формат называется «минимально ограниченным».
мин-
Этот формат называется «минимально неограниченным».
мин-макс
Этот формат называется «ограниченным».

где «мин» и «макс» — допустимые номера версий. Легальный синтаксис — частный случай расширенного синтаксиса, обеспечивающий обратную совместимость. Что касается удовлетворения, правила таковы:

  1. версия должна удовлетворять хотя бы одному из перечисленных требований, чтобы считаться удовлетворительной.
  2. Версия удовлетворяет «ограниченному» требованию, когда:
    1. Если мин равно макс, если и только если версия равна мин.
    2. В противном случае, если и только если версия больше или равна мин и меньше макс, где мин и макс были дополнительно заполнены внутри «a0». Обратите внимание, что, хотя сравнение с мин включительно, сравнение с макс — исключающее.
  3. Требование «минимально ограниченное» — это «ограниченное» требование в скрытой форме, с макс частью, неявно заданной как следующая более высокая основная версия мин части. Версия удовлетворяет ему по вышеуказанным правилам.
  4. версия удовлетворяет требованию «минимально неограниченному», если и только если она больше или равна мин, где мин дополнительно заполнен внутри «a0». Нет ограничений по максимуму.
пакет предпочесть ?последняя|стабильно?
Без аргументов команда возвращает либо «последняя», либо «стабильно», в зависимости от текущего режима логики выбора, используемой командой пакет потребовать.

При передаче аргумента «последняя» устанавливает режим логики выбора на «последняя».

При передаче аргумента «стабильно», если режим уже «стабильно», то это значение сохраняется. Если режим уже «последняя», то попытка установить его обратно на «стабильно» неэффективна, и значение режима остается «последняя».

При передаче любого другого значения в качестве аргумента возникает ошибка некорректного аргумента.

При создании интерпретатора его начальное значение режима выбора устанавливается на «стабильно», если переменная среды TCL_PKG_PREFER_LATEST не установлена. Если эта переменная среды определена (любым значением), то начальное (и постоянное) значение режима выбора устанавливается на «последняя».

Номера версий

Номера версий состоят из одного или нескольких десятичных чисел, разделенных точками, таких как 2 или 1.162 или 3.1.13.1. Первое число называется номером основной версии. Более крупные числа соответствуют более поздним версиям пакета, причем числа слева имеют большее значение. Например, версия 2.1 позднее, чем 1.3, а версия 3.4.6 позднее, чем 3.3.5. Отсутствующие поля эквивалентны нулям: версия 1.3 такая же, как версия 1.3.0 и 1.3.0.0, поэтому она более ранняя, чем 1.3.1 или 1.3.0.2. Кроме того, буквы «a» (альфа) и/или «b» (бета) могут появляться ровно один раз, заменяя точку для разделения. Эти буквы семантически добавляют отрицательный спецификатор в версию, где «a» — -2, а «b» — -1. Каждая может быть указана только один раз, и «a» или «b» взаимно исключают друг друга в спецификаторе. Таким образом, 1.3a1 становится (семантически) 1.3.-2.1, 1.3b1 — 1.3.-1.1. Отрицательные числа напрямую не разрешены в спецификаторах версий. Номер версии, не содержащий букв «a» или «b», как указано выше, называется стабильной версией, в то время как наличие этих букв означает, что версия нестабильна. Более поздняя версия, как предполагается, совместима с более ранней версией, если обе версии имеют один и тот же номер основной версии. Например, скрипты Tcl, написанные для версии 2.3 пакета, должны работать без изменений в версиях 2.3.2, 2.4 и 2.5.1. Изменения в номере основной версии означают несовместимые изменения: если код написан для использования версии 2.1 пакета, он не гарантированно будет работать без изменений ни с версией 1.7.3, ни с версией 3.1.

Индексы пакетов

Рекомендуемый способ использования пакетов в Tcl — вызов команд пакет потребовать и пакет предоставить в скриптах и использование процедуры pkg_mkIndex для создания файлов индекса пакетов. После этого пакеты будут загружаться автоматически в ответ на команды пакет потребовать. Подробности см. в документации по pkg_mkIndex.

Примеры

Чтобы указать, что скрипт Tcl требует пакетов Tk и http, поместите это в начало скрипта:
package require Tk
package require http

Для проверки наличия пакета Snack и его загрузки (что часто полезно для необязательных улучшений программ, где потеря функциональности некритична), сделайте следующее:

if {[catch {package require Snack}]} {
    # Error thrown - package not found.
    # Set up a dummy interface to work around the absence
} else {
    # We have the package, configure the app to use it
}

См. также

msgcat, packagens, pkgMkIndex

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/package.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/package.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API