如何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 中的包更抽象。
首先,有两种包:“经典”和“模块”,它们具有不同的底层机制来查找响应package require ...
命令加载的内容。
接下来,这两种包都可以做任何他们想做的事情来提供他们的功能。这意味着它们可以是(但不限于):
source
只需要一个 Tcl 文件或任意数量的文件。load
需要包时获取。因此,这个问题本身没有什么意义,因为只有一个模块由一个独立的文件表示,但“经典”包可以自由地按照他们认为合适的方式实现自己。
另一方面,每个包通常会(使用一种或另一种方式)向包子系统提供某些信息,这些信息可以使用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