______________________________________________________________________________
NAME
package - 装 载 包 和 版 本 控 制 的 设 施
总 览 SYNOPSIS
package
forget ?package package ...?
package ifneeded package version ?script?
package names
package present ?-exact? package
?version?
package provide package ?version?
package require ?-exact? package
?version?
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version1 version2
_________________________________________________________________
描 述 DESCRIPTION
这 个 命 令 维 持 由 当 前 解 释 器 使 用 的 可 获 得 的 包 以 及 如 何 把 它 们 装 载 到 解 释 器 中 的 一 个 简 单 的 数 据 库 。 它 支 持 每 个 包 的 多 个 版 本 , 并 基 于 应 用 的 需 要 安 排 装 载 一 个 包 的 正 确 的 版 本 。 这 个 命 令 还 检 测 并 报 告 版 本 冲 突 。 典 型 的 , 在 通 常 的 Tcl 脚 本 中 只 调 用 package require 和 package provide 命 令 ; 其 他 命 令 主 要 被 系 统 脚 本 用 来 维 护 包 数 据 库 。
package
命 令 的 行 为 由
它 的 第 一 个 参
数 确 定 。 允 许
下 列 形 式 :
package forget ?package package ...? 从
这 个 解 释 器 中
删 除 关 于 每 个
指 定 的 包 的 所
有 信 息 , 包 括
由 package ifneeded 和 package
provide 提 供 的 信 息
。
package ifneeded package version ?script?
这 个 命 令 典 型
的 只 出 现 在 系
统 配 置 脚 本 中
, 被 用 来 设 置
包 数 据 库 。 若
需 要 一 个 特 定
的 包 的 一 个 特
定 的 版 本 , 它
指 示 如 果 这 个
包 的 这 个 版 本
是 可 获 得 的 ,
可 通 过 执 行 script
来 把 这 个 包 来
增 加 到 解 释 器
上 。 脚 本 保 存
在 一 个 数 据 库
中 , 由 随 后 的
package require 命 令 使 用
; 典 型 的 , script
为 在 包 中 的 命
令 设 置 自 动 装
载 (或 直 接 调 用
load 和 /或 source),
接 着 调 用 package provide
来 指 示 这 个 包
已 经 存 在 。 在
数 据 库 中 可 以
有 一 个 单 一 的
包 的 多 个 版 本
的 信 息 。 如 果
数 据 库 已 经 包
含 了 对 package 和
version 的 信 息 , 则
新 script 替 换 现 存
的 脚 本 。 如 果
省 略 了 script 参 数
, 返 回 包 package 的
版 本 version 的 当 前
脚 本 , 如 果 未
对 这 个 package 和
version 调 用 package ifneeded
命 令 则 返 回 一
个 空 串 。
package names 返 回 在 这
个 解 释 器 中 所
有 包 的 名 字 ,
为 这 些 包 提 供
了 一 个 版 本 (通
过 package provide)或 可 获
得 给 它 们 的 package
ifneeded 脚 本 。 在 列
表 中 的 元 素 的
次 序 是 任 意 的
。
package present ?-exact? package
?version? 除 了 在 包
没 有 装 载 时 它
不 尝 试 并 装 载
它 之 外 , 这 个
命 令 等 价 于 package
require。
package provide package ?version? 调
用 这 个 命 令 来
指 示 在 这 个 解
释 器 中 包 package 的
这 个 版 本 version 现
在 已 经 存 在 。
它 典 型 的 被 作
为 一 个 ifneeded脚 本
的 一 部 分 而 调
用 一 次 , 并 在
包 最 终 装 载 时
被 包 自 身 再 次
调 用 。 如 果 以
前 的 package provide 命 令
已 经 提 供 的 package
的 一 个 不 同 的
版 本 则 生 成 一
个 错 误 。 如 果
省 略 了 version 参 数
, 则 命 令 返 回
当 前 提 供 包 的
版 本 号 , 如 果
在 这 个 解 释 器
中 对 package 没 有 调
用 package provide 命 令 则
返 回 一 个 空 串
。
package require ?-exact? package
?version? 这 个 命 令
典 型 的 被 想 要
使 用 特 定 包 的
特 定 版 本 的 Tcl 脚
本 调 用 。 参 数
指 示 想 要 哪 个
包 , 和 确 保 把
包 的 合 适 版 本
装 载 到 解 释 器
中 的 命 令 。 如
果 命 令 成 功 执
行 , 它 返 回 装
载 的 包 的 版 本
号 ; 否 则 生 成
一 个 错 误 。 如
果 同 时 指 定 了
-exact 开 关 和 version
选 项 , 则 只 接
受 给 定 版 本 。
如 果 省 略 了 -exact
但 指 定 了 version ,
则 主 版 本 号 与
version 相 同 但 晚 于
version 的 版 本 也 可
以 接 受 。 如 果
省 略 了 -exact 和
version二 者 则 任 何
版 本 都 可 接 受
。 如 果 已 经 提
供 了 package 的 一 个
版 本 (通 过 调 用
package provide 命 令 ), 则
它 的 版 本 号 必
须 满 足 由 -exact 和
version 给 出 的 条 件
并 且 命 令 立 即
返 回 。 否 则 ,
命 令 查 找 由 以
前 的 package ifneeded 命 令
提 供 的 信 息 的
数 据 库 , 看 是
否 能 获 得 一 个
可 接 受 的 版 本
。 如 果 有 , 则
调 用 最 可 接 受
的 版 本 号 的 脚
本 ; 它 必 须 做
所 有 装 载 这 个
包 所 必 须 的 工
作 , 包 括 调 用
为 这 个 包 调 用
package provide。 如 果 package
ifneeded数 据 库 不 包
含 这 个 包 的 可
接 受 的 版 本 并
且 为 这 个 解 释
器 指 定 了 一 个
package unknown 命 令 则 调
用 这 个 命 令 ;
当 它 完 成 的 时
候 , Tcl 再 次 检 查
是 否 现 在 提 供
了 这 个 包 或 是
否 有 一 个 给 它
的 package ifneeded脚 本 。
如 果 所 有 这 些
步 骤 不 能 提 供
这 个 包 的 一 个
可 接 受 的 版 本
, 则 命 令 返 回
一 个 错 误 。
package unknown ?command? 这 个
命 令 提 供 在 一
个 “最 后 一 搏
”(’’last resort’’) 命
令 , 在 package require 期
间 如 果 package ifneeded 数
据 库 中 没 有 一
个 包 的 合 适 的
版 本 可 调 用 这
个 命 令 。 如 果
提 供 了 command 参 数
, 它 包 含 一 个
命 令 的 第 一 部
分 , 在 一 次 package
require 命 令 期 间 调
用 这 个 命 令 的
时 候 , Tcl 添 加 给
出 所 须 的 包 的
名 字 和 版 本 的
两 个 附 加 参 数
。 例 如 , 如 果
command是 foo bar 并 且
后 来 调 用 了 命
令 package require test 2.4, 则
Tcl 将 执 行 命 令 foo bar
test 2.4 来 装 载 这 个
包 。 如 果 未 给
package require 命 令 提 供
版 本 号 , 则 给
这 个 被 调 用 的
命 令 的 版 本 参
数 是 一 个 空 串
。 如 果 package unknown命
令 但 不 加 command 参
数 , 则 返 回 当
前 的 package unknown 脚 本
, 如 果 没 有 就
返 回 一 个 空 串
。 如 果 指 定 command
为 一 个 空 串 ,
若 当 前 有 package unknown
脚 本 则 删 除 它
。
package vcompare version1 version2 比
较 由 version1和 version2
给 出 的 两 个 版
本 。 如 果 version1 比
version2 早 就 返 回
-1, 如 果 相 同 则
返 回 0, 如 果
version1 比 version2 晚 则
返 回 1。
package versions package 返 回
package 的 所 有 版 本
号 , 通 过 package ifneeded
命 令 为 它 们 提
供 了 信 息 。
package vsatisfies version1 version2 如
果 为 version2 写 的 脚
本 不 须 更 改 就
可 为 version1 工 作 则
返 回 1(例 如 ,
version1 大 于 等 于
version2 并 且 有 相 同
的 主 版 本 号 ),
否 则 返 回 0。
版 本 号 VERSION NUMBERS
版 本 号 由 一 个 或 多 个 用 点 号 分 隔 的 十 进 制 数 组 成 , 比 如 2 或 1.162 或 3.1.13.1。 第 一 个 数 叫 做 主 版 本 号 。 越 大 的 数 对 应 一 个 包 的 越 晚 的 版 本 , 最 左 边 的 数 有 更 大 的 权 重 (significance). 例 如 , 版 本 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 早 。 假 定 一 个 晚 期 版 本 向 上 (upward)兼 容 有 相 同 主 版 本 号 的 早 期 版 本 。 例 如 , 为 一 个 包 的 版 本 2.3 写 的 Tcl 脚 本 应 当 在 版 本 2.3.2、 2.4、 和 2.5.1 下 不 须 更 改 就 能 工 作 。 主 版 本 号 的 变 更 表 示 有 不 兼 容 的 变 更 : 如 果 代 码 是 使 用 了 一 个 包 的 版 本 2.1 写 成 的 , 不 保 证 在 版 本 1.7.3 或 版 本 3.1 下 不 须 更 改 就 能 工 作 。
包 索 引 PACKAGE INDICES
推 荐 的 在 Tcl 中 使 用 包 的 方 式 是 在 脚 本 中 调 用 package require 和 package provide 命 令 , 并 使 用 过 程 pkg_mkIndex 来 建 立 包 索 引 文 件 。 一 旦 你 已 经 这 样 做 了 , 将 自 动 的 装 载 包 来 响 应 package require 命 令 。 详 情 请 参 见 pkg_mkIndex 的 文 档 。
参 见 SEE ALSO
msgcat(n), packagens(n), pkgMkIndex(n)
关 键 字 KEYWORDS
package, version
[中 文 版 维 护 人 ]
寒 蝉 退 士
[中 文 版 最 新 更 新 ]
2001/08/31
《 中 国 Linux 论 坛 man 手 册 页 翻 译 计 划 》 :
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh