9

tclロードされたパッケージのパスをどのように見つけるのですか?

% tclsh
% package require csv

csvロードされたパスを知りたい。

Pythonでは、を使用してモジュールのパスを見つけることができます

>>> import os
>>> print os.__file__
'/a/b/python2.2.1/linux26_x86_64/lib/python2.2/os.pyc'

私はで同様のコマンドを探していますtcl

4

3 に答える 3

21

それはそれほど単純ではありません。TclのパッケージはPythonのパッケージよりも抽象的なもののように見えます。

まず、パッケージには「クラシック」と「モジュール」の2種類があり、コマンドに応答して何をロードするかを見つけるための基本的なメカニズムが異なりpackage require ...ます。

次に、両方の種類のパッケージは、機能を提供したいことを何でも実行できます。これは、次のことができることを意味します(ただし、これらに限定されません)。

  • 純粋なTclパッケージ、source'1つのTclファイルまたは任意の数のファイル。
  • Cまたは別のコンパイル言語で実装されloadたパッケージ。パッケージが必要なときに編集されるダイナミックライブラリの形式です。
  • 上記の組み合わせで、Cライブラリとその周りにTclコードのレイヤーがある場合(通常はヘルパー/コンビニエンスコマンドを提供します)。

したがって、モジュールのみが1つの自己完結型ファイルで表されるため、質問自体はほとんど意味がありませんが、「クラシック」パッケージは、適切と思われる場合は自由に実装できます。

一方、各パッケージは通常、package ifneededコマンドを使用して取得(および解析)できる特定の情報を(何らかの方法で)パッケージサブシステムに提供します。たとえば、ActiveState Tcl 8.5.xを使用しているWindowsシステムでは、次のようになります。

% package require csv
0.7.2
% package ifneeded csv 0.7.2
package provide csv 0.7.2;source -encoding utf-8 {C:/Program Files/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.3/csv-0.7.2.tm}

package ifneeded返されるのは、パッケージをロードするために使用されることを意図したTclスクリプトevalであるため、この情報の解析は本質的にアドホックで脆弱であることに注意してください。

于 2012-05-30T17:37:11.677 に答える
4

Tclパッケージの場合、次のコマンドでロード可能なすべてのパスディレクトリのリストを表示できます。

join $::auto_path \n
于 2017-03-26T23:16:24.293 に答える
0

このマニュアルでは、auto_pathおよびその他のロード可能なライブラリ変数について説明します。https://www.systutorials.com/docs/linux/man/n-auto_path/新しい または欠落しているロード可能なパッケージ検索ディレクトリをtclsh内に追加できます:lappend auto_path / new_directoty

于 2019-05-24T16:01:28.817 に答える