## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > package

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    package — 梱包の積込と版番号制御の便益 Facilities for package loading and version control
  構文 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...
    package prefer ?latest|stable?
  版番号 VERSION NUMBERS
  PACKAGE INDICES
  REQUIREMENT
    min
    min-
    min-max
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

package — 梱包の積込と版番号制御の便益 Facilities for package loading and version control

### 構文 SYNOPSIS

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?

### 説明 DESCRIPTION

この命令は､現在の解釈実行機能による使用と､如何にしてそれを解釈実行機能に組込むかの､利用可能な梱包の単純な基本データを保持する｡本命令は､各梱包の複数の版を運用し､応用譜によって必要とされる事柄に基いて組込まれるべき､梱包の正しい版を手配する｡この命令は又､版の不調和を検知し報告する｡典型的には､通常のTcl記述譜からは package require と package provide 命令だけが起動される; 他の命令は第１には梱包の基本データを維持している系の記述譜によって使用される｡ This command keeps a simple database of the packages available for use by the current interpreter and how to load them into the interpreter. It supports multiple versions of each package and arranges for the correct version of a package to be loaded based on what is needed by the application. This command also detects and reports version clashes. Typically, only the package require and package provide commands are invoked in normal Tcl scripts; the other commands are used primarily by system scripts that maintain the package database.

package 命令の振舞いは第１引数によって定められる｡次の形式が許容されている: The behavior of the package command is determined by its first argument. The following forms are permitted:

package forget ?package package ...?
  この解釈実行機能により､それぞれ指定された梱包に関する情報を､package ifneeded と package provide によりもたらされた情報も含めて､取除く｡ Removes all information about each specified package from this interpreter, including information provided by both package ifneeded and package provide.

package ifneeded package version ?script?
  この命令は典型的には､梱包基本データを開始する為の系の構成設定記述譜の中にのみ現れる｡それは､必要であれば､特定の梱包の特定の版が利用でき､そして､その梱包は､script を実行することによって､解釈実行機能に追加できることを指し示す｡その記述譜は､引続く package require 命令によって使う為の基本データ中に保存される; 典型的には script は､梱包中の命令の為の自動-組込みを始めさせる(又は､ load を呼ぶ そして/又は直接 source する)､次いで､梱包が存在することを示す為に package provide を起動する｡一つの梱包の異なる幾つかの版については､基本データ中に情報があるかもしれない｡もし､基本データが既に package と version に関わる情報を含んでいると､新しい script が既存の記述譜に置換わる｡もし､ script 引数が省略されていると､現在の記述譜と､版番号については version ､梱包名については package が返って来るか､又は､この package と version に関して package ifneeded 命令が起動されたことがなければ､空文字列が返って来る｡ This command typically appears only in system configuration scripts to set up the package database. It indicates that a particular version of a particular package is available if needed, and that the package can be added to the interpreter by executing script. The script is saved in a database for use by subsequent package require commands; typically, script sets up auto-loading for the commands in the package (or calls load and/or source directly), then invokes package provide to indicate that the package is present. There may be information in the database for several different versions of a single package. If the database already contains information for package and version, the new script replaces the existing one. If the script argument is omitted, the current script for version version of package package is returned, or an empty string if no package ifneeded command has been invoked for this package and version.

package names
  解釈実行機能中の､版が与えられ( package provide経由で)､又は､ package ifneeded 記述譜が利用可能な､全ての梱包の名前のリストが返る｡リスト中の要素の順は任意である｡ Returns a list of the names of all packages in the interpreter for which a version has been provided (via package provide) or for which a package ifneeded script is available. The order of elements in the list is arbitrary.

package present ?-exact? package ?requirement...?
  この命令はpackage require と殆ど同じであるが､違いは､梱包が未だ組込まれていない場合に､この命令は組込もうとしない｡ This command is equivalent to package require except that it does not try and load the package if it is not already loaded.

package provide package ?version?
  この命令は版番号 version の梱包名 package が解釈実行機能内に存在することを示す為に起動される｡典型的には､ ifneeded 記述譜の一部として一度､最終的に組込まれる時に､もう一度､その梱包そのものに起動される｡それに先立つ､ package provide 命令によって､異なる版番号の package が与えられると不都合を生じる｡もし､ version 引数が省略されると､この命令は現在与えられているものの版番号を返すか､この解釈実行機能内に package について package provide 命令でが起動されていなかった時は空文字列を返す｡ This command is invoked to indicate that version version of package package is now present in the interpreter. It is typically invoked once as part of an ifneeded script, and again by the package itself when it is finally loaded. An error occurs if a different version of package has been provided by a previous package provide command. If the version argument is omitted, then the command returns the version number that is currently provided, or an empty string if no package provide command has been invoked for package in this interpreter.

package require package ?requirement...?
  この命令は典型的には､特定の梱包の特定の版番号を使用を希望する Tcl 命令譜によって起動される｡この引数は､どの梱包が必要であるかを示し､この命令が確実にその梱包の適切な版を解釈実行機能に組込む様にする｡この命令は成功すると､組込まれた版の番号を返す;失敗すると不都合を返す｡ This command is typically invoked by Tcl code that wishes to use a particular version of a particular package. The arguments indicate which package is wanted, and the command ensures that a suitable version of the package is loaded into the interpreter. If the command succeeds, it returns the version number that is loaded; otherwise it generates an error.

  梱包の適切な版番号は 下記のREQUIREMENT節に定義された様に少なくとも一つの要求を満たすどの様な版でもよい｡もし幾つもの版が適切な場合は､最も高位の版が選択される｡この最後の部分は､追加的にpackage preferとして設定された選択に影響される｡ A suitable version of the package is any version which satisfies at least one of the requirements as defined in the section REQUIREMENT below. If multiple versions are suitable the implementation with the highest version is chosen. This last part is additionally influenced by the selection mode set with package prefer.

  選択方法が “(安定)stable” であると､この命令は､幾つかある中から､要求を満足する最も高い安定版を選択する｡安定版が要求を満たさない場合､要求を満たす､最も高い不安定版を選択する｡ “(最新)latest” の選択方法では､この命令は､安定性を考慮せず､全ての要求を満たす最も高い版を選択する｡ In the “stable” selection mode the command will select the highest stable version satisfying the requirements, if any. If no stable version satisfies the requirements, the highest unstable version satisfying the requirements will be selected. In the “latest” selection mode the command will accept the highest version satisfying all the requirements, regardless of its stableness.

  もし､ package の版が既に与えられていると(package provide 命令の起動によって)､版番号は requirement を満足している必要があり､この場合､命令はすぐさま返って来る｡そうでない時､命令は､受入れ可能な､利用できる梱包の版を捜す為に､以前に package ifneeded 命令で与えられていた情報を捜索する｡見付けると､大域名前空間内で､受入れ可能な､最も高い版の記述譜が起動される; それは､梱包に関する package provide 呼出しを含め､梱包の組込みに必要なことは何であれ実行する｡もし､ package ifneeded 基本データが梱包の受入れ可能な版を含んで無く､且つ､ package unknown 命令が解釈実行機能に関して指定されていないと､その命令は大域名前空間内で評価される; それが完了した時､Tcl は再び､梱包が今度は供給されたか､又は､そのための package ifneeded 記述譜が存在するかを確認する｡もし､梱包の受入れ可能な版を供給する為の､この全ての段階が失敗した場合､この命令は不具合を返す｡ If a version of package has already been provided (by invoking the package provide command), then its version number must satisfy the requirements and the command returns immediately. Otherwise, the command searches the database of information provided by previous package ifneeded commands to see if an acceptable version of the package is available. If so, the script for the highest acceptable version number is evaluated in the global namespace; it must do whatever is necessary to load the package, including calling package provide for the package. If the package ifneeded database does not contain an acceptable version of the package and a package unknown command has been specified for the interpreter then that command is evaluated in the global namespace; when it completes, Tcl checks again to see if the package is now provided or if there is a package ifneeded script for it. If all of these steps fail to provide an acceptable version of the package, then the command returns an error.

package require -exact package version
  この命令のこの形式は､与えられた package の version が呼出し側に受入れ可能である時にのみ使用される｡この命令は､ package require package version-version と等価である｡ This form of the command is used when only the given version of package is acceptable to the caller. This command is equivalent to package require package version-version.

package unknown ?command?
  この命令は､package require の間に､ package ifneeded 基本データの中には梱包の適切な版が見付らない場合､起動すべき “最後の源資” 命令を提供する｡もし command 引数が与えられた場合､それは命令の最初の部分を含む; 命令が package require 命令の間に､その command が起動されると､Tcl は望ましい梱包の名前を要求事項を与える一つか二つの追加的な引数を付加する｡ 譬えば､命令が foo bar であって､命令の後に package require test 2.4R が起動されると､ Tcl は梱包を組込む為に foo bar test 2.4 の命令を遂行する｡もし､ package require 命令に要求事項が提供されない場合､起動された命令に名前のみが付加されることになる｡もし command 引数無しに package unknown 命令が起動される場合は､現在の package unknown 記述譜が返されるか､何もない場合は空も文字列が返される｡もし､ command が空文字列として指定されると､現在の package unknown は､一つだけなら､それが取除かれる｡　　　 This command supplies a “last resort” command to invoke during package require if no suitable version of a package can be found in the package ifneeded database. If the command argument is supplied, it contains the first part of a command; when the command is invoked during a package require command, Tcl appends one or more additional arguments giving the desired package name and requirements. For example, if command is foo bar and later the command package require test 2.4 is invoked, then Tcl will execute the command foo bar test 2.4 to load the package. If no requirements are supplied to the package require command, then only the name will be added to invoked command. If the package unknown command is invoked without a command argument, then the current package unknown script is returned, or an empty string if there is none. If command is specified as an empty string, then the current package unknown script is removed, if there is one.

package vcompare version1 version2
  与えれれた二つの版番号 version1 と version2 を比較する｡もし､ version1 が version2 よりも若い版であると -1 を､同じなら 0 を､ version1 が version2 よりも後であると1を返す｡ Compares the two version numbers given by version1 and version2. Returns -1 if version1 is an earlier version than version2, 0 if they are equal, and 1 if version1 is later than version2.

package versions package
  package ifneeded 命令で与えれた情報について package の全ての版番号のリストを返す｡ Returns a list of all the version numbers of package for which information has been provided by package ifneeded commands.

package vsatisfies version requirement...
  version が与えられた要求を少なくとも一つ満足していると1を､それ以外は0を返す｡requirementsは下記REQUIREMENTに定義されている｡ Returns 1 if the version satisfies at least one of the given requirements, and 0 otherwise. requirements are defined in the REQUIREMENT section below.

package prefer ?latest|stable?
  引数がない場合､この命令は､ package require を使って､現在の選択方式の様式をどの様に記述していても､ “latest” か “stable” を返す｡ 　　　 With no arguments, the commands returns either “latest” or “stable”, whichever describes the current mode of selection logic used by package require.

  引数 “latest” が渡されると､選択方式の様式を “latest” に設定する｡ When passed the argument “latest”, it sets the selection logic mode to “latest”.

  引数 “stable” が渡されると､もし､様式が既に “stable” であれば､値が保持される｡もし､様式が既に “latest” になっていると､ “stable” に戻すことにより影響がないと､様式の値は “latest” のまま残される｡ When passed the argument “stable”, if the mode is already “stable”, that value is kept. If the mode is already “latest”, then the attempt to set it back to “stable” is ineffective and the mode value remains “latest”.

  それ以外の値が引数に渡されると､不適切の不具合が生ずる｡ When passed any other value as an argument, raise an invalid argument error.

  解釈実行機能が生成された時､最初の選択様式の値は､環境変数 TCL_PKG_PREFER_LATEST が(どの様な値かに)設定されていない限り “stable” に設定される｡そうでなければ､ 初期の(そして､恒久的な)選択様式は “(最新)latest” に値が設定される｡ 　　 When an interpreter is created, its initial selection mode value is set to “stable” unless the environment variable TCL_PKG_PREFER_LATEST is set (to any value). Otherwise the initial (and permanent) selection mode value is set to “latest”.

### 版番号 VERSION NUMBERS

版番号は一つ或はそれ以上の十進数を点で区切って､ 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” (alpha) 及び/又は “b” (beta) は区切りの点の代わりに一回だけ現れることがある｡これらの文字は､意味論的に､版番号に負の指定を追加する､ここで “a” は -2　 そして “b” は -1 である｡それぞれは一度だけ指定され､ “a” 又は “b” は相互に排他的な指定である｡従って､1.3a1 は(意味論的に) 1.3.-2.1 であり 1.3b1 は 1.3.-1.1 である｡負数は直接には､版番号指定には許容されない｡ 上で指定した様な､文字 “a” や “b” を含まない版番号は､安定版と呼ばれ､それ故､文字の存在は､版番号が非安定版と呼ばれることになる｡新しい版は､同じ主要番号である限り､古い版に較べ､上位互換性であると仮定される｡譬えば､2.3版梱包用に書かれた記述譜は､変更することなく､ 2.3.2 と 2.4 版 と 2.5.1 版の下で動作する｡主要番号の変更は､互換性の変更を意味する: 梱包の 2.1 版を使う為に書いた譜は変更なしに1.7.3 版や 3.1 版で動くことは保障されない｡ Version numbers consist of one or more decimal numbers separated by dots, such as 2 or 1.162 or 3.1.13.1. The first number is called the major version number. Larger numbers correspond to later versions of a package, with leftmost numbers having greater significance. For example, version 2.1 is later than 1.3 and version 3.4.6 is later than 3.3.5. Missing fields are equivalent to zeroes: version 1.3 is the same as version 1.3.0 and 1.3.0.0, so it is earlier than 1.3.1 or 1.3.0.2. In addition, the letters “a” (alpha) and/or “b” (beta) may appear exactly once to replace a dot for separation. These letters semantically add a negative specifier into the version, where “a” is -2, and “b” is -1. Each may be specified only once, and “a” or “b” are mutually exclusive in a specifier. Thus 1.3a1 becomes (semantically) 1.3.-2.1, 1.3b1 is 1.3.-1.1. Negative numbers are not directly allowed in version specifiers. A version number not containing the letters “a” or “b” as specified above is called a stable version, whereas presence of the letters causes the version to be called is unstable. A later version number is assumed to be upwards compatible with an earlier version number as long as both versions have the same major version number. For example, Tcl scripts written for version 2.3 of a package should work unchanged under versions 2.3.2, 2.4, and 2.5.1. Changes in the major version number signify incompatible changes: if code is written to use version 2.1 of a package, it is not guaranteed to work unmodified with either version 1.7.3 or version 3.1.

### PACKAGE INDICES

梱包をTcl 内で利用する推奨方法は､記述譜中で package require と package provide 命令を起動することと､索引ファイルの作成には､手続函数 pkg_mkIndex を使うことである｡一度之を実行しておくと､梱包は自動的に package require 命令に応答して組込まれるようになる｡詳細は pkg_mkIndex に関する説明を参照されたい｡ 　　　　 The recommended way to use packages in Tcl is to invoke package require and package provide commands in scripts, and use the procedure pkg_mkIndex to create package index files. Once you have done this, packages will be loaded automatically in response to package require commands. See the documentation for pkg_mkIndex for details.

### REQUIREMENT

requirement文字列は､互換性版番号の梱包が存在するかを確認する｡ 多くの命令は最も高位の適正版番号が合致する要求文字列のリストを受容れる｡　　　　　　　　　　　　　 A requirement string checks, if a compatible version number of a package is present. Most commands accept a list of requirement strings where the highest suitable version is matched.

それぞれの要求事項requirementは､次のような形式を許容する: 　 Each requirement is allowed to have any of the forms:

min
  この形式は “最小-束縛” と呼ばれる｡ This form is called “min-bounded”.

min-
  この形式は “最小-非束縛” と呼ばれる｡ This form is called “min-unbound”.

min-max
  この形式は “束縛” と呼ばれる｡ This form is called “bounded”.

  ここで “最小min” と “最大max” は適正番号である｡遺産的構文は､拡張構文の特別な場合であり､旧版との互換性を保つ｡ 充足度を考慮した規則は: 　 where “min” and “max” are valid version numbers. The legacy syntax is a special case of the extended syntax, keeping backward compatibility. Regarding satisfaction the rules are:

  1. versionは少なくとも､列挙された要求事項requirementの内の一つが満足されることとを､ 考慮する｡ The version has to pass at least one of the listed requirements to be satisfactory.

  2. 以下の場合､版番号は “束縛” を満足する A version satisfies a “bounded” requirement when

     1. 最大maxと等しい最小minに関しては､ もし版番号versionが最小minに等しい場合､その場合に限る｡ For min equal to the max if, and only if the version is equal to the min.

     2. それ以外の場合､版番号versionが最小minに等しいか大きく､且つ､ 最大maxより小さい場合に限る､ ここで､最小minと最大maxは内部的に暫定版番号の “a0” が添付されている｡ 註意すべきは､最小minとの比較では､等号を含み､ 最大maxとの比較では､等号を含まない｡ Otherwise if, and only if the version is greater than or equal to the min, and less than the max, where both min and max have been padded internally with “a0”. Note that while the comparison to min is inclusive, the comparison to max is exclusive.

  3. “最小-束縛” 要求は､ ､最大部位を､最小minの次の主版番号として暗示した 擬装した “束縛” 要求である｡版番号は､上記規則に沿って､これを満足している｡ A “min-bounded” requirement is a “bounded” requirement in disguise, with the max part implicitly specified as the next higher major version number of the min part. A version satisfies it per the rules above.

  4. 版番号versionは もし､それが最小に等しいかより大きい場合に限り､ “最小-束縛” 要求を満足している､ここでは最小は暫定版番号 “a0” が内部的に添付されている｡最大値への拘束はない｡ A version satisfies a “min-unbound” requirement if, and only if it is greater than or equal to the min, where the min has been padded internally with “a0”. There is no constraint to a maximum.

### 用例 EXAMPLES

Tcl 譜は Tk と http 梱包が必要､と述べる為に､これを記述譜の先頭に置く｡ To state that a Tcl script requires the Tk and http packages, put this at the top of the script:

    package require Tk
    package require http

梱包Snack が利用でき､あれば組込めるか､を調べる(機能の喪失が致命的ではない所で､任意的な能力増大の作譜には便利であることが多い)には､こうする: To test to see if the Snack package is available and load if it is (often useful for optional enhancements to programs where the loss of the functionality is not critical) do this:

    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
    }

### SEE ALSO

msgcat, packagens, pkgMkIndex

### KEYWORDS

package, version
Copyright © 1996 Sun Microsystems, Inc.