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
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
それはそれほど単純ではありません。TclのパッケージはPythonのパッケージよりも抽象的なもののように見えます。
まず、パッケージには「クラシック」と「モジュール」の2種類があり、コマンドに応答して何をロードするかを見つけるための基本的なメカニズムが異なりpackage require ...
ます。
次に、両方の種類のパッケージは、機能を提供したいことを何でも実行できます。これは、次のことができることを意味します(ただし、これらに限定されません)。
source
'1つのTclファイルまたは任意の数のファイル。load
たパッケージ。パッケージが必要なときに編集されるダイナミックライブラリの形式です。したがって、モジュールのみが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
であるため、この情報の解析は本質的にアドホックで脆弱であることに注意してください。
Tclパッケージの場合、次のコマンドでロード可能なすべてのパスディレクトリのリストを表示できます。
join $::auto_path \n
このマニュアルでは、auto_pathおよびその他のロード可能なライブラリ変数について説明します。https://www.systutorials.com/docs/linux/man/n-auto_path/新しい または欠落しているロード可能なパッケージ検索ディレクトリをtclsh内に追加できます:lappend auto_path / new_directoty